时间: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;
}