Im试图通过回溯来解决背包问题。在C++中使用Backtraking的背包解决方案
例如,对于下面的值,背包函数将返回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];
}
}
}
这里有什么问题?
您是否尝试过使用一个非常小的问题(即更小的值[]')并逐步执行代码,直到您发现错误,然后思考为什么?或者,将一些'std :: cout << ...'行放入循环中? –