您的位置:首页 > 其它

01背包问题

2018-03-07 10:51 211 查看
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。

问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?

思路:f(i,x)表示前i件物品  背包容量为x时的最优价值

状态方程为 f(i,x) = max(f(i-1,x-w[i]) + c[i], f(i-1,x));
#include<bits/stdc++.h>
using namespace std;
const int N = 105;
int m,n;
int w
,c
,dp

;
int main()
{
cin >> m >> n;  //  背包的容量为m  一共有n种物品
for(int i = 1;i <= n;i ++)
cin >> w[i] >> c[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-w[i]] + c[i],dp[i-1][j]);
else
dp[i][j] = dp[i-1][j];
}
}
cout << dp
[m];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: