......这有何难.完全背包的转移你会吧?这样不就简单了,在转移完成的dp[1..maxv]数组中,从maxv到1降序查找每一个dp[i],在第一个dp[i]>dp[i-1]的地方退出循环,此时i即为所求.
这个很简单
可以类比为普通的背包
将每个物体的体积看做为每个的价值进行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]
writeln(v-f[v]);
end.
(一维数组f,记录所选物体体积)
可以再开一个记录用的数组.....随着价值转移而转移
这个不太简单啦