[2016-05-10][51nod][1085 背包问题 ]

  • 时间: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
  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string.h>
  4. using namespace std;
  5. const int maxw = 1E4 + 10;
  6. const int maxn = 1E2 + 10;
  7. int dp[maxw],w[maxn],v[maxn];
  8. int main(){
  9. int n,mw;
  10. scanf("%d%d",&n,&mw);
  11. for(int i = 0 ; i < n ; ++i){
  12. scanf("%d%d",&w[i],&v[i]);
  13. }
  14. memset(dp,0,sizeof(dp));
  15. int ans = 0;
  16. for(int i = 0; i < n;++i){
  17. for(int j = mw; j >= w[i];--j){
  18. dp[j] = max(dp[j - w[i]] + v[i], dp[j]);
  19. ans = max(ans, dp[j]);
  20. }
  21. }
  22. printf("%d\n",ans);
  23. return 0;
  24. }


来自为知笔记(Wiz)


posted on 2016-05-10 09:47  红洋  阅读(122)  评论(0编辑  收藏  举报

导航