zoukankan      html  css  js  c++  java
  • 01背包(模板)

    01背包
    n种物品,没种的重量为W,价值为V,背包容量为C,求在不超过C的情况下能装入的最大价值;
    测试数据:
    5 10
    2 6
    2 3
    6 5
    5 4
    4 6
    Answer 15

    第一种是用一维数组表示的:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int n,C;
     8 struct node
     9 {
    10     int W,V;
    11 }maze[10];
    12 int dp[20]; //dp[j] 用一位数组表示:当剩余容量为j时,当前的最大价值.
    13 
    14 int main()
    15 {
    16     while(scanf("%d%d",&n,&C)!=EOF)
    17     {
    18         for(int i=0;i<n;i++)
    19         {
    20             scanf("%d%d",&maze[i].W,&maze[i].V);
    21         }
    22         memset(dp,0,sizeof(dp));
    23         for(int i=0;i<n;i++)
    24         {
    25             for(int j=C;j>=maze[i].W;j--)
    26                 dp[j] = max(dp[j-maze[i].W]+maze[i].V,dp[j]);
    27         }
    28         printf("%d",dp[C]);
    29     }
    30     return 0;
    31 }
    
    

    第二种是用二维数组表示的,相对第一种耗空间小点:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int n,C;
     8 struct node
     9 {
    10     int W,V;
    11 }maze[10];
    12 int dp[20][20]; // dp[i][j] 拿第i件物品,剩余容量为j时的最大价值.
    13 
    14 int main()
    15 {
    16     while(scanf("%d%d",&n,&C)!=EOF)
    17     {
    18         for(int i=1;i<=n;i++)  //不能写for(int i=0;i<n;i++),这样会导致少算一个数,因为后边的i-1
    19         {
    20             scanf("%d%d",&maze[i].W,&maze[i].V);
    21         }
    22         memset(dp,0,sizeof(dp));
    23         for(int i=1;i<=n;i++)
    24         {
    25             for(int j=1;j<=C;j++)
    26             {
    27                 if(maze[i].W>j)
    28                     dp[i][j] = dp[i-1][j];
    29                 else
    30                     dp[i][j] = max(dp[i-1][j-maze[i].W]+maze[i].V,dp[i-1][j]);
    31             }
    32         }
    33         printf("%d",dp[n][C]);
    34     }
    35     return 0;
    36 }
     

  • 相关阅读:
    js-高级06-正则
    js-高级05-javaScript处理机制
    js-高级04-函数高级应用
    js-高级03-面向对象的继承
    js-高级02-贪吃蛇案例分析
    js-高级01面向对象及创建对象
    js-API 06 高级动画二
    js-API 05 高级动画
    对象数组 数组对象 增删改查 数组
    jQuery ajax请求 一般请求和自定义请求
  • 原文地址:https://www.cnblogs.com/cypblogs/p/10071825.html
Copyright © 2011-2022 走看看