pascal 一个完全背包问题(很难。。。。。。。。)

2024-12-16 18:39:48
推荐回答(4个)
回答1:

......这有何难.完全背包的转移你会吧?这样不就简单了,在转移完成的dp[1..maxv]数组中,从maxv到1降序查找每一个dp[i],在第一个dp[i]>dp[i-1]的地方退出循环,此时i即为所求.

回答2:

这个很简单
可以类比为普通的背包
将每个物体的体积看做为每个的价值进行DP
用数组记录最后输出最大值即可
var f:array[0..20000]of longint;
a:array[0..30]of longint;
v,n,i,j:longint;
begin
readln(v);
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(F),0);
for i:=1 to n do
for j:=a[i] to m do
if f[j] f[j]:=f[j-a[i]]+a[i];
writeln(v-f[v]);
end.
(一维数组f,记录所选物体体积)

回答3:

可以再开一个记录用的数组.....随着价值转移而转移

回答4:

这个不太简单啦