51,410
社区成员
发帖
与我相关
我的任务
分享public Knapsack solveKnapsackOptimal(Knapsack k, LinkedList<Item> items){
//TODO: Implement this
int table[][] = new int[items.size() + 1][k.maxWeight + 1];
int p[][] = new int[items.size() + 1][k.maxWeight + 1];
for(int i = 0;i<items.size()+1;i++){
table[i][0] = 0;
}
for(int j = 0;j<k.maxWeight+1;j++){
table[0][j] = 0;
}
for(int i = 0;i<items.size()+1;i++){
p[i][0] = 0;
}
for(int j = 0;j<k.maxWeight+1;j++){
p[0][j] = 0;
}
for(int i = 1;i<items.size()+1;i++){
for(int j = 1;j<k.maxWeight+1;j++){
if(items.get(i-1).getWeight() <= j){
if(table[i-1][j]<(table[i-1][j-items.get(i-1).getWeight()] + items.get(i-1).getValue())){
table[i][j] = table[i-1][j-items.get(i-1).getWeight()] + items.get(i-1).getValue();
p[i][j] = 1;
}else{
table[i][j] = table[i-1][j];
}
}else{
table[i][j] = table[i-1][j];
}
}
}
int i = items.size();
int j = k.maxWeight;
while(i>0&&j>0){
if(p[i][j] == 1){
Item tmp = items.get(i-1);//!!
k.addItem(tmp);
j = j - tmp.getWeight();
}
i--;
}
return k;
}