问题标题: 酷町堂:1296

0
0
已解决
程思怡
程思怡
中级守护
中级守护
var 
    f,a:array[0..100] of longint;
    i,j,n:longint;

function min(x,y:longint):longint;
begin
    if x>y then exit(y);
    exit(x);
end;

begin
    for i:=1 to 10 do read(a[i]);
    read(n);
    for i:=1 to 10 do 
        f[i]:=maxlongint;
    f[0]:=0;
    for i:=1 to 10 do 
        for j:=i to n do 
            f[j]:=min(f[j],f[j-i]+a[i]);
    write(f[n]);
end.

为什么我连样例都过不了??


1
已采纳
夏子健
夏子健
初级光能
初级光能

程思怡,输入数据之前必须把整个数组全部赋值为0(注意是f数组)

夏子健在2018-02-11 20:18:53追加了内容

赋值为一个很大的数

 f[0]=0;
    for(int i=1;i<=200010;i++)
        f[i]=999999;
 

夏子健在2018-02-11 20:19:40追加了内容

第一次说错了,抱歉

1
陆麟瑞
陆麟瑞
资深天翼
资深天翼

一道经典的完全背包只不过是求方法数的。

for i:=1 to n do
 begin
      f[i]:=maxlongint;
      for j:=1 to 10 do
      if i>=j then f[i]:=min(f[i-j]+a[j],f[i]);
 end;

答案是f[n];

0
0
0
李乐凡
李乐凡
新手光能
新手光能

请发一下题目,谢谢!

0
我要回答