| 
 | 
вернуться в форумI use DP, but get WA#4!!! var   a:array[1..20] of longint;   b:array[1..440] of longint;   max,n,nn,i,s,s2:longint;   procedure readdata; begin   assign(input,'in.in');   reset(input);   readln(n);   s:=0;   for i:=1 to n do   begin   readln(a[i]);   s:=s+a[i];   end;   s2:=s div 2;   close(input); end;   procedure writedata; begin   writeln(abs( (s-max)-max )); end;   function check(l:longint):boolean; var   i:integer;   bb:boolean;   begin   bb:=false;   for i:=1 to nn do   if b[i]=l then   begin     bb:=true;     break;   end;   check:=false; end;   procedure sum(l:longint); var   i,nnn:longint;   begin   nnn:=nn;   for i:=1 to nnn do   begin     if not check(b[i]+l) then     begin       inc(nn);       b[nn]:=b[i]+l;       if (b[nn]<=s2) and (b[nn]>max) then       max:=b[nn];     end;   end; end;   begin   readdata;   nn:=0;  max:=-maxint;   for i:=1 to n do   begin     if not check(a[i]) then     begin       inc(nn);       b[nn]:=a[i];       sum(a[i]);     end;   end;   writedata; end. Re: I use DP, but get WA#4!!! Please explain what you are doing! I have an AC solution in C+ + for this problem, if you want I can mail it to you. +++++++++++++++++ 3 1 1 1 {1} YOUR (65...) 2 1 1 {0} YOUR (65...) Re: +++++++++++++++++ Послано  SSS 24 апр 2005 23:30 {Виктор, история повторяется}   Here is program which gives correct answer for your tests, but I still get WA!   var a:array[1..20] of longint; b:array[1..440] of longint; max,n,nn,i,s,s2:longint;   procedure readdata; begin readln(n); s:=0; for i:=1 to n do begin readln(a[i]); s:=s+a[i]; end; s2:=s div 2; end;   procedure writedata; begin writeln(abs( abs(s-max)-abs(max) )); end;   function check(l:longint):boolean; var i:integer; bb:boolean;   begin bb:=false; for i:=1 to nn do if b[i]=l then begin bb:=true; exit; end; check:=false; end;   procedure sum(l:longint); var i,nnn:longint;   begin nnn:=nn; for i:=1 to nnn do begin if not check(b[i]+l) then begin if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; inc(nn); b[nn]:=b[i]+l; if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; end; end; end;   begin readdata; nn:=0; max:=-maxint; for i:=1 to n do begin if not check(a[i]) then begin inc(nn); b[nn]:=a[i]; sum(a[i]); end; end; writedata; end.   Re: +++++++++++++++++ readln[a[i]] >>read[a[i]] (change) 2 323 2222 1899 (1253?????As so it has turned out) 3 2 22 222 198 Re: +++++++++++++++++ Послано  SSS 25 апр 2005 12:24 Here is program which gives correct answer for your tests, BUT I still get WA! ;(   When I change readln to read I got Crash(Access Violation).   var a:array[1..20] of longint; b:array[1..440] of longint; max,n,nn,i,s,s2:longint;   procedure readdata; begin { assign(input,'in.in'); reset(input); } readln(n); s:=0; for i:=1 to n do begin readln(a[i]); s:=s+a[i]; end; s2:=s div 2; { close(input); } end;   procedure writedata; begin writeln(abs( abs(s-max)-abs(max) )); end;   function check(l:longint):boolean; var i:integer; bb:boolean;   begin bb:=false; for i:=1 to nn do if b[i]=l then begin bb:=true; exit; end; check:=false; end;   procedure sum(l:longint); var i,nnn:longint;   begin nnn:=nn; for i:=1 to nnn-1 do begin if ((b[i]+l)<=s2) and (not check(b[i]+l)) then begin if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; inc(nn); b[nn]:=b[i]+l; if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; end; end; end;   begin readdata; nn:=0; max:=a[1]; for i:=1 to n do begin if not check(a[i]) then begin inc(nn); b[nn]:=a[i]; sum(a[i]); end; end; writedata; end.     Edited by author 25.04.2005 12:29 Re: +++++++++++++++++ 3 1 2 1 0     4 2 2 2 2 0 Reconsider the algorithm Algorithm was reconsidered, still WA! Algorithm was reconsidered, still WA! This program gives correct answer for your tests, but ... WA!   var a:array[1..20] of longint; b:array[1..440] of longint; max,n,nn,i,s,s2:longint;   procedure readdata; begin { assign(input,'in.in'); reset(input); } readln(n); s:=0; for i:=1 to n do begin readln(a[i]); s:=s+a[i]; end; s2:=s div 2; { close(input); } end;   procedure writedata; begin writeln(abs( abs(s-max)-abs(max) )); end;   function check(l:longint):boolean; var i:integer; bb:boolean;   begin bb:=false; for i:=1 to nn do if b[i]=l then begin bb:=true; exit; end; check:=false; end;   procedure sum(l:longint); var i,nnn:longint;   begin nnn:=nn; for i:=1 to nnn-1 do begin if ((b[i]+l)<=s2) and (not check(b[i]+l)) then begin if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; inc(nn); b[nn]:=b[i]+l; if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; end; end; end;   begin readdata; nn:=0; max:=a[1]; for i:=1 to n do begin if not check(a[i]) then begin inc(nn); b[nn]:=a[i]; if (b[nn]<=s2) and (b[nn]>max) then max:=b[nn]; sum(a[i]); end; end; writedata; end.   Edited by author 26.04.2005 16:19 Замени readln(a[i])>>>read(a[i]) и (b:array[1..10000] of longint) Crash (ACCESS_VIOLATION)test 4 write on mail   Edited by author 26.04.2005 22:53  |  
  | 
|