Description
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30=,每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
Input
Output
Sample Input
24 一个整数,表示箱子容量
6 一个整数,表示有n个物品
8 接下来n行,分别表示这n 个物品的各自体积
3
12
7
9
7
Sample Output
0 一个整数,表示箱子剩余空间。
解题思路1:f[i,j]表示前i件物品放入一个容量为j的背包可以获得的最大价值,状态转移方程为:
f[i,j]=max{f[i-1,j-w[i]]+w[i],f[i-1,j]
(1<=i<=n,1<=j<=v)
v-f[n,v]即为所求。
时间复杂度: O(nv)
程序1:
var
begin
end.
解题思路2:
f[j]
表示上一篇解题报告的
f[i,j]
,状态转移方程为:
f[j]=max{f[j],f[j-w[i]]+w[i]}
(1<=i<=n,v>=j>=0)
v-f[v]即为所求。
时间复杂度: O(nv)
程序2:
var
function max(a,b:longint):longint;
end;
begin
end.