Q80018 - C++编程预备组判断题18
统计题目( 判断题 )
这是一个经典的完全背包问题动态规划解法。它在给定物品重量和价值的情况下,计算在不超过背包容量的前提下,如何选取物品使总价值最大化。
int knapsack(int W, int wt[], int val[], int n) {
vector<vector<int>> dp(n + 1, vector<int>(W + 1, 0));
for (int i = 1; i <= n; i++) {
for (int w = 1; w <= W; w++) {
if (wt[i-1] > w) {
dp[i][w] = dp[i-1][w];
} else {
dp[i][w] = max(dp[i-1][w], val[i-1] + dp[i-1][w - wt[i-1]]);
}
}
}
return dp[n][W];
}

关注我们