• hdu--2191--终于可以说出dp水题这句话了-.-


    这题是 上一题的 recommend 过来的 很水..

    虽然是多重背包 但是 因为数据太小了 完全可以不用二进制拆分去做

    我两者都去写了下 ...都是0ms..

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 const int size = 110;
     7 int weight[size*20];
     8 int val[size*20];
     9 int dp[size];
    10 
    11 int main()
    12 {
    13     cin.sync_with_stdio(false);
    14     int t , n , m , cnt , a , b , c;
    15     cin >> t;
    16     while(t--)
    17     {
    18         cin >> n >> m;
    19         cnt = 0;
    20         memset( dp , 0 , sizeof(dp) );
    21         for( int i = 1 ; i<=m ; i++ )
    22         {
    23             cin >> a >> b >> c;
    24             for( int j = 1 ; j<=c ; j<<=1 )
    25             {
    26                 val[cnt] = j * a;
    27                 weight[cnt++] = j*b;
    28                 c -= j;
    29             }
    30             if(c)
    31             {
    32                 val[cnt] = c*a;
    33                 weight[cnt++] = c*b;
    34             }
    35         }
    36         for( int i = 0 ; i<cnt ; i++ )
    37         {
    38             for( int j = n ; j>=val[i] ; j-- )
    39             {
    40                 dp[j] = max( dp[j] , dp[ j-val[i] ] + weight[i] );
    41             }
    42         }
    43         cout << dp[n] << endl;
    44     }
    45     return 0;
    46 }
    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 const int size = 110;
     7 int weight[size*20];
     8 int val[size*20];
     9 int dp[size];
    10 
    11 int main()
    12 {
    13     cin.sync_with_stdio(false);
    14     int t , n , m , cnt , a , b , c;
    15     cin >> t;
    16     while(t--)
    17     {
    18         cin >> n >> m;
    19         cnt = 0;
    20         memset( dp , 0 , sizeof(dp) );
    21         for( int i = 1 ; i<=m ; i++ )
    22         {
    23             cin >> a >> b >> c;
    24             while(c--)
    25             {
    26                 weight[cnt] = b;
    27                 val[cnt++] = a;
    28             }
    29         }
    30         for( int i = 0 ; i<cnt ; i++ )
    31         {
    32             for( int j = n ; j>=val[i] ; j-- )
    33             {
    34                 dp[j] = max( dp[j] , dp[ j-val[i] ] + weight[i] );
    35             }
    36         }
    37         cout << dp[n] << endl;
    38     }
    39     return 0;
    40 }
    View Code

    今天下午 网络赛 我要认真了 -.-

    just follow your heart
  • 相关阅读:
    浴谷夏令营2017.8.1数论的整理
    BZOJ1483: [HNOI2009]梦幻布丁
    NOIP2014-11-3模拟赛
    BZOJ3884: 上帝与集合的正确用法
    BZOJ4869: [Shoi2017]相逢是问候
    计蒜客NOIP2017提高组模拟赛(三)day1
    NOIP2014-9-6模拟赛
    NOIP2014-7-7模拟赛
    zoj Little Keng(快速幂)
    多校Key Set (快速幂)
  • 原文地址:https://www.cnblogs.com/radical/p/3983044.html
Copyright © 2020-2023  润新知