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
  • 相关阅读:
    C语言函数qsort的使用方法
    成绩打分
    distance.c
    留学生题目
    6大排序算法比较
    小游戏得分[石头剪刀布]
    二叉排序树算法
    头文件相关
    小型考试系统
    小题目【链表1】
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3375123.html
Copyright © 2011-2022 走看看