题目:http://acm.hdu.edu.cn/showproblem.php?pid=2191


分析:有资金n元,而市场有m种大米,每种大米价格不等,重量不等,数量不等,

并且只能整袋购买。如何用有限的资金最多能采购多少公斤粮食呢?
在这里价格相当与传统多重背包的“花费”而重量是“价值”。
    dp[j]=max{ dp[j-k*c[i]+w[i]]  |  0<=k<=n[i] }
这里将多重背包转换为01背包和完全背包。

#include<stdio.h>
#include<string.h>

int dp[110],n;

void ZeroOnePack(int cost,int weight)
{
  for(int j=n;j>=cost;j--)
    dp[j]=dp[j]>dp[j-cost]+weight?dp[j]:dp[j-cost]+weight;
}

void ComplelePack(int cost,int weight)
{
  for(int j=cost;j<=n;j++)
    dp[j]=dp[j]>dp[j-cost]+weight?dp[j]:dp[j-cost]+weight;
}

void MultiplePack(int cost,int weight,int amount)
{
  if(cost*amount>n)
  {
    ComplelePack(cost,weight);
    return;
  }
  int k=1;
  while (k<=amount)
  {
    ZeroOnePack(k*cost,k*weight);
    amount-=k;
    k*=2;
  }
  ZeroOnePack(amount*cost,amount*weight);
}

int main()
{
  int C,m,p[102],h[102],num[102];
  scanf("%d",&C);
  while (C--)
  {
    //读取数据
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
      scanf("%d%d%d",&p[i],&h[i],&num[i]);

    //初始化  不需要“装满”
    memset(dp,0,sizeof(dp));

    //多重背包问题
    for(int i=1;i<=m;i++)
      MultiplePack(p[i],h[i],num[i]);

    printf("%d\n",dp[n]);
  }
  return 0;
}



HDU--2191 汶川地震购米(多重背包)的更多相关文章

  1. HDU 2191 悼念汶川地震(多重背包)

    思路: 多重背包转成01背包,怎么转?把一种大米看成一堆单个的物品,每件物品要么装入,要么不装.复杂度比01背包要大.时间复杂度为O(vns)(这里S是所有物品的数量s之和).这个做法太粗糙了,但就是 ...

  2. HDU 2191 - 单调队列优化多重背包

    题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...

  3. HDU 3732 Ahui Writes Word(多重背包)

    HDU 3732 Ahui Writes Word(多重背包) http://acm.hdu.edu.cn/showproblem.php? pid=3732 题意: 初始有N个物品, 每一个物品有c ...

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

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

  5. HDU 5445 Food Problem(多重背包+二进制优化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:现在你要为运动会提供食物,总共需要提供P能量的食物,现在有n种食物,每种食物能提供 t 能量,体积为 ...

  6. HDU 3732 Ahui Writes Word 多重背包优化01背包

    题目大意:有n个单词,m的耐心,每个单词有一定的价值,以及学习这个单词所消耗的耐心,耐心消耗完则,无法学习.问能学到的单词的最大价值为多少. 题目思路:很明显的01背包,但如果按常规的方法解决时间复杂 ...

  7. HDU 2844 二进制优化的多重背包

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. HDU 5445——Food Problem——————【多重背包】

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  9. HDU 1059 Dividing 分配(多重背包,母函数)

    题意: 两个人共同收藏了一些石头,现在要分道扬镳,得分资产了,石头具有不同的收藏价值,分别为1.2.3.4.5.6共6个价钱.问:是否能公平分配? 输入: 每行为一个测试例子,每行包括6个数字,分别对 ...

随机推荐

  1. java OOP第03章_继承、抽象类和抽象方法

    一. 为什么需要继承: 若多个类中都需要一些属性和方法,那么就可以将属性和方法抽取到一个父类中,需要的子类可以通过extends关键字去继承这个父类后拥有相应的属性和方法. 类.数组.方法----引用 ...

  2. PROJECT | 四则运算UI设计 - PSP表格&需求分析

    PSP表格(TP版) 需求分析 [GUI编程语言选择] 考虑到Java编写GUI效率偏低且界面不算特别美观(即使有Windowbuilder插件帮助),所以我们使用控件更多,开发效率更高,具有集成开发 ...

  3. 常见的arp欺骗

    三.常见ARP欺骗形式 1.假冒ARP reply包(单播) XXX,I have IP YYY and my MAC is ZZZ! 2.假冒ARP reply包(广播) Hello everyon ...

  4. 初识 HTML

    HTML 1.描述 HTML超文本标记语言(英语:HyperText Markup Language)是一种用于创建网页的标准标记语言 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行 ...

  5. 校园商铺-2项目设计和框架搭建-9验证Service

    1. 新建接口 main: com.csj2018.o2o.service/AreaService.java package com.csj2018.o2o.service; import java. ...

  6. sql语句之条件,分页,排序

    sql语句之条件,分页,排序

  7. 阿里云图数据库GraphDB上线,助力图数据处理

    GraphDB简介 GraphDB图数据库适用于存储,管理,查询复杂并且高度连接的数据,图库的结构特别适合发现大数据集下数据之间的共性和特性,特别善于释放蕴含在数据关系之间的巨大价值.GraphDB引 ...

  8. Entityframwork.extended 配置mysql

    entityframework.extended 这个是个很好的扩展,不过由于默认是配置成MSSQL的,今天在github上面 看到一个解决方案,亲测可用,下面贴代码 1.在DbContext 修改默 ...

  9. iOS开发之SceneKit框架--SCNAction.h

    1.SCNAction简介 主要负责节点SCNNode的属性,实现node的渐变.移动.出现.消失.实现动画等. 2.相关API 节点的移动(earthNode的初始坐标(5,0,0)) //从当前位 ...

  10. H2数据库的基本使用

    文章目录 下载jar包 启动服务 下载jar包 下载h2-1.3.176.jar 这个包(部分服务版本不一致,请自行更换版本) 启动服务 从终端定位到刚才jar包下载的位置,比如我这里是Downloa ...