背包总重量为N,思路就是建立一个N+1的数组,用来存入放入0<=i<=N重量时所能得到的最大价值。然后挨个处理物品,进行是否装入的判断,处理完毕后对数组进行遍历,输出最大的值。
主要关键代码是result[j]=Math.max(result[j], result[j-w[i]]+v[i]);也就是物品N选择是否装入。
java代码如下:
public int maxValue(int[] w, int[] v, int n, int cap) {
int []result = new int[cap+1];
for(int i:result){
result[i]=-1;
}
result[0]=0;
for(int i=0;i<n;i++){
//对每个背包进行处理
for(int j=cap;j-w[i]>=0;j--){
if(result[j-w[i]]!=-1){
result[j]=Math.max(result[j], result[j-w[i]]+v[i]);
}
}
}
int res=0;
for(int i=0;i<=cap;i++){
if(result[i]>res){
res = result[i];
}
}
return res;
}