时间:2016-05-10 09:42:56 星期二
题目编号:[2016-05-10][51nod][1085 背包问题 ]
题目大意:
- 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。
分析:背包问题
- dp[i] 表示容积i下,能容纳的最大价值
- dp[i] = max(dp[i],dp[I - w[j]] + v[j]) 对于物品 j ,有两种选择,放或者不放,取最优的选择
- 初始化为0
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;const int maxw = 1E4 + 10;const int maxn = 1E2 + 10;int dp[maxw],w[maxn],v[maxn];int main(){ int n,mw; scanf("%d%d",&n,&mw); for(int i = 0 ; i < n ; ++i){ scanf("%d%d",&w[i],&v[i]); } memset(dp,0,sizeof(dp)); int ans = 0; for(int i = 0; i < n;++i){ for(int j = mw; j >= w[i];--j){ dp[j] = max(dp[j - w[i]] + v[i], dp[j]); ans = max(ans, dp[j]); } } printf("%d\n",ans); return 0;}