C++实现0-1背包问题
时间: 2023-07-07 12:31:53 浏览: 103
0-1背包问题c++实现
4星 · 用户满意度95%
好的,以下是C++实现0-1背包问题的代码:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int w[MAXN], v[MAXN];
int dp[MAXN][MAXN];
int main() {
int n, m;
cin >> n >> m; // n表示物品数量,m表示背包容量
for (int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j >= w[i]) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
cout << dp[n][m] << endl;
return 0;
}
```
这里使用动态规划的思路来解决0-1背包问题。其中,dp[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。通过填充dp数组,最终得到的dp[n][m]就是问题的解,即前n个物品放入容量为m的背包中所能获得的最大价值。
阅读全文