这才是正解!!
var
n,i,j,p,m:integer;
a:array[1..100] of integer;
f:array[0..5000] of integer;
begin
read(n);
p:=0;
for i:=1 to n do
begin
read(a[i]);
p:=p+a[i];
end;
m:=p;
p:=p div 2;
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=p downto 1 do
if (j>=a[i]) and (abs(f[j-a[i]]+a[i]-p)<abs(f[j]-p))
then f[j]:=f[j-a[i]]+a[i];
p:=m-2*f[p];
writeln(p);
end.
无语了