【发布时间】:2014-06-17 03:00:06
【问题描述】:
我在尝试使用回溯解决背包问题时遇到了麻烦。
例如,对于以下值,背包函数将返回 14 作为解,但正确的结果应该是 7。
int n = 3, weights[] = {2, 3, 1}, values[] = {6, 15, 7};
int solution = 0, max = 2;
void Knapsack (int i, int max, int value, int *solution)
{
int k;
for (k = i; k < n; k++) {
if (weights[k] <= max) {
Knapsack (k, max - weights[k], value + values[k], solution);
if (value+ values[k] > *solution)
*solution= value + values[k];
}
}
}
这里有什么问题?
【问题讨论】:
-
您是否尝试过使用真正最小的问题(即较小的
values[])并单步执行代码,直到您发现它出错,然后思考为什么?或者,将一些std::cout << ...行放入循环中?
标签: c++ backtracking knapsack-problem