这才是正解!!
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.
无语了