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