• 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 }
     

  • 相关阅读:
    CentOS 下实现两台服务器之间的共享NFS
    CentOS 下安装无线哥的老爷机DELL的无线驱动
    PHP 如何读取一个1G的文件大小
    php 经典的算法题你懂的
    mongodb与mysql命令对比
    TCP协议的三次握手和四次挥手过程
    java 发送带Basic Auth认证的http post请求实例代码
    HTTP基本认证(Basic Authentication)的JAVA实例代码
    Http协议
    MySQL主从同步那点事儿
  • 原文地址:https://www.cnblogs.com/cypblogs/p/10071825.html
Copyright © 2020-2023  润新知