为它写一个C++的完整代码
时间: 2024-09-30 14:05:00 浏览: 23
当然,这是一个使用C++实现0-1背包问题的完整代码,同样基于动态规划思想:
```cpp
#include <iostream>
using namespace std;
int knapsack(int W, int wt[], int val[], int n) {
int dp[1 + n][W + 1];
// 初始化动态规划数组
for (int i = 0; i <= n; i++) {
for (int w = 0; w <= W; w++) {
// 如果物品数量为0 或者 背包为空,则价值为0
if (i == 0 || w == 0)
dp[i][w] = 0;
else if (wt[i - 1] <= w) { // 如果当前物品能装进背包
dp[i][w] = max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w]); // 可以选或不选
} else {
dp[i][w] = dp[i - 1][w]; // 不能选,所以选择不放
}
}
}
return dp[n][W];
}
int main() {
int M, N;
cout << "请输入背包容量: ";
cin >> M;
cout << "请输入物品数量: ";
cin >> N;
int weights[N], values[N];
for (int i = 0; i < N; i++) {
cin >> weights[i] >> values[i];
}
int max_value = knapsack(M, weights, values, N);
cout << "最大总价值: " << max_value << endl;
return 0;
}
```
这个代码首先读取输入的背包容量、物品数量以及每种物品的重量和价值,然后计算出在给定背包容量下所能获得的最大价值。`knapsack`函数就是核心的动态规划部分。
阅读全文