【发布时间】:2014-05-03 07:01:23
【问题描述】:
我正在尝试实现递归背包我使用通用算法编写如下:
int pack(int n, int s) {
if (n < 0)
return 0;
if (List[n].s > s)
return pack(n-1, s);
else {
int max = Math.max(pack(n-1,s), pack(n-1, s -List[n].s) + List[n].v);
return max;
}
}
无论如何我可以知道哪些物品被包装了吗?
更新:我只想要属于最佳选择的项目,我不想更改函数标题。
EDIT使用数组来追踪物品,这有什么问题?
int pack(int n , int s)
{
if(n < 0)
{
counter =0;
return 0;
}
if (itemsList[n].s > s)
{
return pack(n-1, s);
}
else
{
int max1 = pack(n-1,s);
int max2 = pack(n-1, s - itemsList[n].s) + itemsList[n].v ;
if(max2 > max1)
{
flag1[counter] = new item();
flag1[counter] = itemsList[n];
counter ++;
}
return max(max1, max2);
}
}
【问题讨论】:
-
这将返回所有的试验,然后再找到最佳的物品选择,我只想要包装好的物品
标签: java knapsack-problem