0
已解决
1210
var
n,i,j,a,b,v:longint;
sum:longint;
h:array [0..300] of longint;
f,s,c:array [0..30000] of longint;
begin
sum:=0;
fillchar(f,sizeof(f),0);
readln(n);
for i:=1 to n do
begin
read(s[i]);
sum:=sum+s[i];
c[i]:=s[i];
end;
v:=sum div 2;
for i:=1 to n do
for j:=v downto s[i] do
begin
if f[j-s[i]] + c[i] > f[j] then
f[j]:=f[j-s[i]] + c[i];
end;
writeln(sum-f[v]-f[v]);
end.
哪错了
0
0
0
0
数组f的范围定义小了
仔细看题目的输入描述即可知道
输入描述 Input Description
第一行输入西瓜数量N (1 ≤ N ≤ 20)
第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量
因为1 ≤ Wi ≤ 10000,所以你的数组f的范围需要比10000*20/2稍大,你的f的范围太小了
0