• 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
  • 相关阅读:
    Python shutil模块
    Flask 上传文件
    Flask DBUtils
    flash-session
    Flash 上下文管理
    python 栈
    python 偏函数
    threding.local
    next() 与 nextLine() 区别
    Thread.sleep(1000*3); // 休眠3秒
  • 原文地址:https://www.cnblogs.com/radical/p/3983044.html
Copyright © 2020-2023  润新知