zoukankan      html  css  js  c++  java
  • HDU 2602 Bone Collector(01背包)

    Bone Collector
     

    最基本的01背包   两种实现都要掌握的很熟练!

     

    二维数组实现01背包:

     1 #include <map>
     2 #include <queue>
     3 #include <stack>
     4 #include <math.h>
     5 #include <stdio.h>
     6 #include <string.h>
     7 #include <iostream>
     8 #include <algorithm>
     9 #define LL long long
    10 using namespace std;
    11 
    12 int dp[1010][1010];
    13 
    14 void run()
    15 {
    16     int p, n, m;
    17     int a[1010], b[1010];
    18     scanf("%d", &p);
    19     while(p--)
    20     {
    21         memset(dp, 0, sizeof(dp));
    22         scanf("%d%d", &n, &m);
    23         for(int i = 1; i <= n; i++)
    24             scanf("%d", &a[i]);
    25         for(int i = 1; i <= n; i++)
    26             scanf("%d", &b[i]);
    27         for(int i = 1; i <= n; i++)          ///二维数组实现01背包
    28         {
    29             for(int j = 0; j <= m; j++)   ///循环从0开始  有体积为0但是有价值的骨头
    30             {
    31                 if(b[i] <= j && dp[i-1][j] < dp[i-1][j-b[i]]+a[i])
    32                     dp[i][j] = dp[i-1][j-b[i]]+a[i];
    33                 else
    34                     dp[i][j] = dp[i-1][j];
    35             }
    36         }
    37         printf("%d
    ", dp[n][m]);
    38     }
    39 }
    40 
    41 int main(void)
    42 {
    43     run();
    44 
    45     return 0;
    46 }
    Bone Collector

     

    一维数组实现01背包:

     1 #include <map>
     2 #include <queue>
     3 #include <stack>
     4 #include <math.h>
     5 #include <stdio.h>
     6 #include <string.h>
     7 #include <iostream>
     8 #include <algorithm>
     9 #define LL long long
    10 using namespace std;
    11 
    12 int dp[1010];
    13 
    14 void run()
    15 {
    16     int p, n, m;
    17     int a[1010], b[1010];
    18     scanf("%d", &p);
    19     while(p--)
    20     {
    21         memset(dp, 0, sizeof(dp));
    22         scanf("%d%d", &n, &m);
    23         for(int i = 1; i <= n; i++)
    24             scanf("%d", &a[i]);
    25         for(int i = 1; i <= n; i++)
    26             scanf("%d", &b[i]);
    27         for(int i = 1; i <= n; i++)     ///一维数组实现01背包
    28         {
    29             for(int j = m; j >= b[i]; j--)
    30             {
    31                 if(dp[j] < dp[j-b[i]]+a[i])
    32                     dp[j] = dp[j-b[i]]+a[i];
    33             }
    34         }
    35         printf("%d
    ", dp[m]);
    36     }
    37 }
    38 
    39 int main(void)
    40 {
    41     run();
    42 
    43     return 0;
    44 }
    Bone Collector
  • 相关阅读:
    UVA 10391 STL容器的使用
    UVA 10763
    UVA 10935
    UVA 洪水
    UVA 1594 set 里面放queue
    关于STL 容器的嵌套使用, 小试牛刀
    丑数 UVA 136
    UVA 1368 DNA
    antd 上传文件控件使用方法(坑)
    mysql查询一条工单时间需要10秒。优化sql语句得以解决。
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3411190.html
Copyright © 2011-2022 走看看