问题标题: 酷町堂:3

0
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
已采纳
夏子健
夏子健
初级光能
初级光能

f范围太小了,程之行

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
夏子健
夏子健
初级光能
初级光能

数组范围都要开到51000

我要回答