01背包问题动态规划代码c++
时间: 2023-11-20 14:57:05 浏览: 88
01背包源代码动态规划法
4星 · 用户满意度95%
以下是0-1背包问题的动态规划代码C++实现:
```c++
#include <iostream>
using namespace std;
const int N = 1010;
int n, m;
int f[N][N], v[N], w[N];
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> v[i] >> w[i];
for (int i = 1; i <= n; i++)
for (int j = 0; j <= m; j++)
{
f[i][j] = f[i - 1][j];
if (j >= v[i])
f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]);
}
cout << f[n][m] << endl;
return 0;
}
```
其中,`f[i][j]`表示前i个物品放入容量为j的背包中所能获得的最大价值。对于每个物品,我们有两种决策:选或不选。如果选,则当前背包容量为`j-v[i]`,价值为`f[i-1][j-v[i]]+w[i]`;如果不选,则当前背包容量为j,价值为`f[i-1][j]`。因此,我们可以得到状态转移方程:`f[i][j] = max(f[i-1][j], f[i-1][j-v[i]]+w[i])`。
阅读全文