//Accepted    868 KB    188 ms
 //多重背包
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <queue>
 #include <cmath>
 #include <algorithm>
 using namespace std;
 /**
   * This is a documentation comment block
   * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
   * @authr songt
   */
 ;
 ;
 int dp[imax_v];
 int n;
 struct node
 {
     int weight,c,a;
 }f[imax_n];
 //按a排序,考虑我们在dp时采用的是倒推,所以我们需要先计算出a较小的时候的情况
 int cmp(node x,node y)
 {
     return x.a<y.a;
 }
 int max(int a,int b)
 {
     return a>b?a:b;
 }
 void zeroOnePack(int weight,int value,int v)
 {
     for (int j=v;j>=weight;j--)
     {
         dp[j]=max(dp[j],dp[j-weight]+value);
     }
 }
 void completePack(int weight,int value,int v)
 {
     for (int j=weight;j<=v;j++)
     {
         dp[j]=max(dp[j],dp[j-weight]+value);
     }
 }
 void multiplePack(int weight,int value,int amount,int v)
 {
     ;
     if (amount*weight>=v)
     {
         completePack(weight,value,v);
         return ;
     }
     while (k<amount)
     {
         zeroOnePack(k*weight,k*value,v);
         amount-=k;
         k<<=;
     }
     zeroOnePack(amount*weight,amount*value,v);
 }
 void Dp()
 {
     memset(dp,,sizeof(dp));
     ;i<=n;i++)
     {
         multiplePack(f[i].weight,f[i].weight,f[i].c,f[i].a);
     }
     ;
     ;i<=;i++)
     ans=max(ans,dp[i]);
     printf("%d\n",ans);
 }
 int main()
 {
     while (scanf("%d",&n)!=EOF)
     {
         ;i<=n;i++)
         scanf("%d%d%d",&f[i].weight,&f[i].a,&f[i].c);
         sort(f+,f+n+,cmp);
         Dp();
     }
     ;
 }

poj2392 多重背包的更多相关文章

  1. poj2392 Space Elevator(多重背包)

    http://poj.org/problem?id=2392 题意: 有一群牛要上太空.他们计划建一个太空梯-----用一些石头垒.他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并 ...

  2. dp之多重背包poj2392

    题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度......... 思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好 ...

  3. 洛谷P1782 旅行商的背包[多重背包]

    题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...

  4. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

  5. Poj 1276 Cash Machine 多重背包

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26172   Accepted: 9238 Des ...

  6. poj 1276 Cash Machine(多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33444   Accepted: 12106 De ...

  7. (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)

    http://poj.org/problem?id=3260   Description Farmer John has gone to town to buy some farm supplies. ...

  8. (多重背包+记录路径)Charlie's Change (poj 1787)

    http://poj.org/problem?id=1787   描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...

  9. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

随机推荐

  1. android 属性

    RelativeLayout 第一类:属性值为true可false android:layout_centerHrizontal        水平居中 android:layout_centerVe ...

  2. UTF-7编码

    目录 1 编码    1 2 编码代码(C++)    2 3 解码代码(C++)    4 4 测试代码(VC++)    7 1 编码 UTF-7编码的规则及特点为: 1)UTF16小于等于 0x ...

  3. Date的那一大堆事儿--1

    String perfTimeStr = "";// 统一设置日历格式 Calendar calendar = Calendar.getInstance(); calendar.s ...

  4. bootstrap--双日历插件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. linux服务器挂载第二块磁盘图文解说

    文章来源:http://www.cndns.com/help/help_con.aspx?hid=394 Linux磁盘挂载是比较常见的管理操作之一.我司橙云预装的linux系统有2块盘,一块为系统盘 ...

  6. jQuery图表开源软件

    jQuery图表插件 jQchart jQchart 是一个jQuery的插件,用来绘制图表的.支持各种形状的图表. 示例代码: == Mini sample == $('#canvasMyID'). ...

  7. 读书笔记3 Socket

    Socket被称为网络插座.用于两个网络应用程序之间的通信. 通信地址:URI 通过协议,地址,端口号可以确定网络上的一个程序.地址和端口号组合称之为端点. 通常会有发信人通信地址,收信人通信地址这两 ...

  8. ABAP-smartform-一页3列的条码打印

    1.自建barcode: se73->System bar code->change->create->new input the name of the bar code y ...

  9. boxplot

    x1 = rand(20,6); x2 = .5+rand(20,6); x3 = randn(20,6); x = [x1;x2;x3]; x = x(:); g1 = [ones(size(x1) ...

  10. MySql中添加用户/删除用户

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...