zoukankan      html  css  js  c++  java
  • HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    解题报告:01背包的变种,每种物品可以有多件,只要稍微变动一下就可以转化为01背包,转化的方法就是假设这件物品有多件的话,就将这多件展开来,也就是把每种物品的每一件都看成是01背包里面的每一件物品。这样 就可以顺利的转化为01背包了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 
     8 int w[2005],v[2005],ans[2005];
     9 
    10 int main()
    11 {
    12     int T,n,m;
    13     scanf("%d",&T);
    14     while(T--)
    15     {
    16         scanf("%d %d",&n,&m);
    17         int num = 0,p,h,c;
    18         for(int i = 1;i <= m;++i)
    19         {
    20             scanf("%d %d %d",&p,&h,&c);
    21             while(c--)
    22             {
    23                 v[++num] = p;
    24                 w[num] = h;
    25             }
    26         }
    27         memset(ans,0,sizeof(ans));
    28         for(int i = 1;i <= num;++i)
    29         for(int j = n;j >= v[i];--j)
    30         ans[j] = max(ans[j],ans[j - v[i]] + w[i]);
    31         printf("%d
    ",ans[n]);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    readonly
    cut
    finger
    ping fping
    chmod/chown/chgrp/chattr
    synchronized 和 volatile 比较
    volatile的适用场合
    volatile的适用场合
    细说Java多线程之内存可见性
    SDUT2139图结构练习——BFS——从起始点到目标点的最短步数
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3375123.html
Copyright © 2011-2022 走看看