我完成了一项作业,其规格要求:
- 递归解决方案
- 容量 <= 100
- 值.长度 <= 25
- 只有参数是容量和索引
- 允许重复值
我花了几个小时阅读垃圾箱包装和背包问题。
以下工作但效率很低。我得到一个包含十几个值的堆栈溢出。非常低效,无法扩展,我不知道从哪里开始。
建议将不胜感激。是的,这是一项学术任务,但我宁愿解决问题,也不愿放弃并获得 B。
public void calculateCombinations(int capacity, int index) {
count++;
if(index < values.length) {
if(values[index] <= capacity) {
currentSolution.addLast(index);
if(values[index] == capacity)
flushSolution();
else
capacity -= values[index];
}
calculateCombinations(capacity, index + 1);
} else
if(currentSolution.peekLast() != null)
calculateCombinations(capacity + values[currentSolution.peekLast()], currentSolution.removeLast() + 1);
}