标题非常明显,我现在已经摆弄了几天。我做错了什么是愚蠢的事情?问题是一堆材料具有相同的权重,因此没有值的输入向量,所以可能是因为我没有在std :: max部分中添加值,但我'我试过这样做,也没有得到正确的答案。 W是背包的容量,w是由物品的重量组成的矢量。
#include <iostream>
#include <vector>
using std::vector;
using std::max;
int optimal_weight(int W, const vector<int> &w) {
size_t size = w.size();
int knapsack[size+1][W+1];
for (size_t a = 0; a <= size; a++) {
knapsack[a][0] = 0;
}
for (int b = 0; b <= W; b++) {
knapsack[0][b] = 0;
}
for (size_t i = 1; i <= size; i++) {
for (int j = 0; j <= W; j++) {
knapsack[i][j] = knapsack[i-1][j];
if (w[i-1] <= j) {
knapsack[i][j] = std::max(knapsack[i-1][j-w[i-1]], knapsack[i-1][j]);
}
}
}
return knapsack[size][W];
}
答案 0 :(得分:0)
代码中的行:int knapsack[size][W+1]
应更改为:int knapsack[size+1][W+1]
这是因为数组是从0
索引的,并且在上面针对0 to size-1
定义的情况下,您正在访问index = size
处的元素。
同时在计算std::max
时添加相应的权重。