有 N 种物品和一个容量是 V的背包,每种物品都有无限件可用。
第 ii种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
最简单的方法就是根据01背包问题加入变量k,k为常数;
未优化:
可以对上述代码进行优化
f[i , j ] = max( f[i-1,j] , f[i-1,j-v]+w , f[i-1,j-2*v]+2*w , f[i-1,j-3*v]+3*w , .....)
f[i , j-v]= max( f[i-1,j-v] , f[i-1,j-2*v] + w , f[i-1,j-3*v]+2*w , .....)
由上两式,可得出如下递推关系:
f[i][j]=max(f[i,j-v]+w , f[i-1][j])
由此代码将会变成以下部分消除k循环
for(int i = 1 ; i <=n ;i++)
for(int j = 0 ; j <=m ;j++)
{ f[i][j] = f[i-1][j]; if(j-v[i]>