01背包问题动态规划c++
时间: 2023-10-13 18:23:42 浏览: 96
01背包问题是经典的动态规划问题,以下是C++代码实现:
```c++
#include<bits/stdc++.h>
using namespace std;
int n, m;//n为物品数量,m为背包容量
int w[1010], v[1010];//w为物品重量,v为物品价值
int f[1010][1010];//f[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值
int main()
{
cin>>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]) f[i][j]=f[i-1][j];
else f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
}
}
cout<<f[n][m]<<endl;//输出最大价值
return 0;
}
```
代码中的f[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。当第i个物品的重量大于当前背包容量j时,不放入该物品,背包中物品价值不变。当第i个物品的重量小于等于当前背包容量j时,可以选择放入该物品或者不放入该物品,取两者的最大值作为当前背包容量下的最大价值。最终输出f[n][m]即为最大价值。
阅读全文