C++实现01背包动态规划
时间: 2023-10-01 09:10:16 浏览: 89
0-1背包问题的C++实现(动态规划)
4星 · 用户满意度95%
以下是C++实现01背包动态规划的代码:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, m;
cin >> n >> m; // n表示物品数量,m表示背包容量
int w[n+1], v[n+1]; // w表示物品重量,v表示物品价值
for (int i = 1; i <= n; i++)
cin >> w[i] >> v[i];
int dp[n+1][m+1]; // dp[i][j]表示前i个物品,背包容量为j时的最大价值
for (int i = 0; i <= n; i++)
dp[i][0] = 0; // 背包容量为0时,最大价值为0
for (int j = 0; j <= m; j++)
dp[0][j] = 0; // 前0个物品时,最大价值为0
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j < w[i]) // 背包容量不足以装第i个物品
dp[i][j] = dp[i-1][j];
else // 能装下第i个物品
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);
}
}
cout << dp[n][m] << endl; // 输出最大价值
return 0;
}
```
输入样例:
```
5 10
2 6
2 3
6 5
5 4
4 6
```
输出样例:
```
15
```
阅读全文