求问这个背包问题哪里写错了

随机下雨 2017-07-10 07:04:56
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;
}

把items中的Item放入背包k中。自己测试的时候运行是正常的,但学校老师的自动测试显示ArrayIndexOutOfBoundsException:7,不知道到底是怎么测出来的。7的话看起来是越界超过了数组的大小,但是检查了几遍还是没看出来哪里越界了。。。求解
...全文
147 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧