Problem Description
急!灾区的食物依旧短缺!

为了拯救灾区同胞的生命,心系灾区同胞的你准备自己採购一些粮食支援灾区,如今如果你一共同拥有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,而且仅仅能整袋购买。

请问:你用有限的资金最多能採购多少公斤粮食呢?



后记:

人生是一个充满了变数的生命过程,天灾、人祸、病痛是我们生命历程中不可预知的威胁。

月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数。那么,我们要做的就应该是珍惜如今,感恩生活——

感谢父母,他们给予我们生命,抚养我们成人;

感谢老师,他们授给我们知识,教我们做人

感谢朋友,他们让我们感受到世界的温暖;

感谢对手,他们令我们不断进取、努力。

相同,我们也要感谢痛苦与艰辛带给我们的財富~





 
Input
输入数据首先包括一个正整数C,表示有C组測试用例,每组測试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包括3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及相应种类大米的袋数。
 
Output
对于每组測试数据,请输出能够购买大米的最多重量,你能够如果经费买不光全部的大米,而且经费你能够不用完。每一个实例的输出占一行。
 
Sample Input
1
8 2
2 100 4
4 100 2
 
Sample Output
400
 
Author
lcy

解题思路:

这个能够做模板。

代码:

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn=102;//有多少种物品
const int inf=0x7fffffff;
int cost[maxn];//每种的花费(每袋的价格)
int value[maxn];//每种的价值(每袋的重量) 减去花费而换取价值,求最大价值
int num[maxn];//每种的数量(每种的袋数)
int f[maxn];//动态数组
int v;//最大容量 void ZeroOnePack(int cost,int value)//01背包
{
for(int i=v;i>=cost;i--)
f[i]=max(f[i],f[i-cost]+value);
} void CompletePack(int cost ,int value)//全然背包
{
for(int i=cost;i<=v;i++)
f[i]=max(f[i],f[i-cost]+value);
} void MultiPack(int cost ,int value,int amount)//多重背包
{
if(v<=cost*amount)
{
CompletePack(cost,value);
return;
}
else
{
int k=1;
while(k<amount)
{
ZeroOnePack(k*cost,k*value);
amount-=k;
k*=2;
}
ZeroOnePack(amount*cost,amount*value);
}
}
int main()
{
int k;cin>>k;
int kindn;//有多少种类
while(k--)
{
cin>>v>>kindn;
for(int i=0;i<kindn;i++)
{
cin>>cost[i]>>value[i]>>num[i];
}
for(int i=0;i<=v;i++)
f[i]=-1*inf;
f[0]=0;
for(int i=0;i<kindn;i++)
MultiPack(cost[i],value[i],num[i]);
cout<<f[v]<<endl;
}
return 0;
}

[ACM] hdu 2191 珍惜如今,感恩生活 (多重背包)的更多相关文章

  1. HDU 2191悼念512汶川大地震遇难同胞——珍惜如今,感恩生活(多重背包)

    HDU 2191悼念512汶川大地震遇难同胞--珍惜如今.感恩生活(多重背包) http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意: 如果你有资金n元, ...

  2. hdu 2191 珍惜现在,感恩生活 多重背包入门题

    背包九讲下载CSDN 背包九讲内容 多重背包: hdu 2191 珍惜现在,感恩生活 多重背包入门题 使用将多重背包转化为完全背包与01背包求解: 对于w*num>= V这时就是完全背包,完全背 ...

  3. --hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)

    解题思路: 多重背包:第 i 件物品有 j 个可用. 本题中 第 p[i] 类大米 有 c[i] 袋大米可买 ,故本题为多重背包. n(总钱数).m(种类) p[i] 单价 h[i] 重量 c[i] ...

  4. HDU 2191 珍惜现在,感恩生活(多重背包模板题)

    多重背包模板题 #include<iostream> #include<cstring> #include<algorithm> using namespace s ...

  5. HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活[多重背包]

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  6. HDU2191:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)

    Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品 ...

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

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

  8. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  9. hdu 2191 珍惜现在,感恩生活(多重背包)

    题意: 有N元经费,M种大米,每种大米有单袋价格p元,单袋重量h,以及对应袋数c. 问最多可以买多重的大米. 思路: 经典多重背包,用二进制的方法. 看代码 代码: struct node{ int ...

随机推荐

  1. 关于GPS偏移的基础知识

    转载地址 我们平时用到的地球坐标系统,叫做WGS84坐标,国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标, ...

  2. 第一次用shell脚本来自动运行带参程序

    将目录下的part-开头的文件带入程序处理 #!bin/sh FILES=/data5/follow_relation_list_part_00000/part-* file="" ...

  3. JSP指令 include 和forward

     包括指令:include     静态包括         <%@include file="要包括的文件路径" %>                 先将所包括 ...

  4. jQuery滑动选取数值范围插件

    HTML 首先载入jQuery库文件以及jRange相关的css文件:jquery.range.css和插件:jquery.range.js <script src="jquery.j ...

  5. 引用枚举进行对比时 enum需强制转换

    枚举类 public enum MailRead { /// <summary> /// 未读 /// </summary> UNREAD=0, /// <summary ...

  6. Android开发 学习笔记——HelloWorld

    Day01 1.java开发过程———————————————不建议先用ECLIPSE写代码,因为它的函数式自动生成的,不利于找寻编程手感打开记事本写完程序后,修改扩展名为.java然后在DOS控制台 ...

  7. 5.7.13mysql 无法登陆

    话不多说 用的http://dev.mysql.com/downloads/mysql/下的ZIP  Archive安装方式 下载 解压,然后吧bin目录添加到系统path环境变量下.然后将my-de ...

  8. oracle操作语句

    Oracle中建立索引,会提高查询速度: create index 索引名 on 表名(列名); create index index_userid on tbl_detail(userid);如何找 ...

  9. oracle11g用户名密码不区分大小写

    oracle 11g 以前的版本的用户名和密码是不区分大小写的; oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_log ...

  10. 《C++ 标准库》读书笔记 - 第二章 Introduction to C++ and the Standard Library

    1. History of the C++ Standards 1.1 History of the C++ Standards C++98 -> C++03 -> TR1 -> C ...