完全背包是在N种物品中选取若干件(同一种物品可多次选取)放在空间为V的背包里,每种物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解怎么装物品可使背包里物品总价值最大。
下面是实现的java代码(由于写了好长时间了,整理电脑上的文件时想把多余的文件删掉,故先把程序写到这里,如果有空再解释。):
public class package1 {
public static int beibao(int num,int value,int [][] f) {
int[][] maxvalue=new int[num+1][value+1];
for(int k=0;k<=num;k++)
{
maxvalue[k][0]=0;
}
for(int y=0;y<=value;y++)
{
maxvalue[0][y]=0;
}
for(int i=1;i<=num;i++)
{
for(int j=1;j<=value;j++){
for(int x=0;x<=value/f[i-1][0];x++)
{
if(x*f[i-1][0]>j)
{ boolean flag=true;
if(x==1)
maxvalue[i][j]=maxvalue[i-1][j];
else {
maxvalue[i][j]=maxvalue[i][j-f[i-1][0]]+f[i-1][1];
}
if(flag)
break;
}
else if(maxvalue[i-1][j]>(maxvalue[i-1][j-x*f[i-1][0]]+x*f[i-1][1])){
maxvalue[i][j]=maxvalue[i-1][j];
}
else {
maxvalue[i][j]=maxvalue[i-1][j-x*f[i-1][0]]+x*f[i-1][1];
}
}
}
}
return maxvalue[num][value];
}
public static void main (String[] args){
int num=4;
int weight=10;
int [][] ff={{2,1},{3,3},{4,5},{7,9}};
int max= beibao(num,weight,ff);
System.out.println(max);
}
}