有N中物品和一个容量为V的背包,第i种物品最多有Mi件可用,每件耗费的空间是ci,价值wi,求解将哪些物品放入背包可使这些物品的耗费空间总和不超过背包容量且价值总和最大。
设f[i,j]表示用了前i种物品填满容量为j的背包后,最多还剩下几个第i中物品可用,如果f[i,j]=-1,则说明这种状态不可行,若可行应满足0<=f[i,j]<=Mi。
o(vn):
f[0,1...v]=-1
f[0,0]=0;
for(i=1;i<=n;i++)
for(j=0;j<=v;j++)
if(f[i-1][j]>=0)
f[i][j]=amai;
else
f[i][j]=-1;
for(j=0;j<=V-ci;j++)
if(f[i][j]>0)
f[i][j+ci]=max(f[i][j+ci],f[i][j]-1);