HDU_2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 24045    Accepted Submission(s): 10161
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
分析:多重背包,二进制优化,可做模板。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191
代码清单:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;const int maxn = 100 + 5;int C;
int n, m;
int p[maxn];
int h[maxn];
int c[maxn];
int dp[maxn];void input() {cin >> n >> m;for(int i = 0; i < m; ++i) {cin >> p[i] >> h[i] >> c[i];}
}void solve() {memset(dp, 0, sizeof(dp));for(int i = 0; i < m; ++i) {if(p[i] * c[i] >= n) {for(int j = p[i]; j <= n; ++j) {dp[j] = max(dp[j - p[i]] + h[i], dp[j]);}}else {int k, ki;for(k = 0; ((1 << (k + 1)) - 1) < c[i]; ++k) {ki = (1 << k);for(int j = n; j >= p[i] * ki; --j) {dp[j] = max(dp[j - p[i] * ki] + h[i] * ki, dp[j]);}}ki = c[i] - ((1 << k) - 1);for(int j = n; j >= p[i] * ki; --j) {dp[j] = max(dp[j - p[i] * ki] + h[i] * ki, dp[j]);}}}cout << dp[n] << endl;
}int main() {cin >> C;for(int t = 0; t < C; ++t) {input();solve();}return 0;
}

HDU_2844 Coins

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12164    Accepted Submission(s): 4852
Problem Description
Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hibix opened purse and found there were some coins. He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(without change) and he known the price would not more than m.But he didn't know the exact price of the watch.

You are to write a program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value A1,A2,A3...An then calculate how many prices(form 1 to m) Tony can pay use these coins.

Input
The input contains several test cases. The first line of each test case contains two integers n(1 ≤ n ≤ 100),m(m ≤ 100000).The second line contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1 ≤ Ai ≤ 100000,1 ≤ Ci ≤ 1000). The last test case is followed by two zeros.
Output
For each test case output the answer on a single line.
Sample Input
3 10 1 2 4 2 1 1 2 5 1 4 2 1 0 0
Sample Output
8 4

题意:给出n个硬币的数量及价值,问在总价值限定为[1, m]的范围内,能够凑成多少种不同的价值。

分析:多重背包。把m当成容量,进行多重背包后,统计[1, m]内的价值有多少种。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844
代码清单:
#include <set>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;const int maxn = 100 + 5;
const int maxm = 100000 + 5;int n, m;
int A[maxn];
int C[maxn];
int dp[maxm];
set<int>cnt;void input() {for(int i = 0; i < n; ++i) {scanf("%d", &A[i]);}for(int i = 0; i < n; ++i) {scanf("%d", &C[i]);}
}void solve() {memset(dp, 0, sizeof(dp));cnt.clear();for(int i = 0; i < n; ++i) {if(A[i] * C[i] >= m) {for(int j = A[i]; j <= m; ++j) {dp[j] = max(dp[j - A[i]] + A[i], dp[j]);}}else {int ki, k;for(k = 0; ((1 << (k + 1)) - 1) < C[i]; ++k) {ki = (1 << k);for(int j = m; j >= A[i] * ki; --j) {dp[j] = max(dp[j - A[i] * ki] + A[i] * ki, dp[j]);}}ki = C[i] - ((1 << k) - 1);for(int j = m; j >= A[i] * ki; --j) {dp[j] = max(dp[j - A[i] * ki] + A[i] * ki, dp[j]);}}}for(int i = 1; i <= m; ++i) {if(dp[i]) cnt.insert(dp[i]);}printf("%d\n", cnt.size());
}int main() {while(scanf("%d%d", &n, &m) != EOF && n + m != 0) {input();solve();}return 0;
}

HDU_多重背包系列相关推荐

  1. 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)

    背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...

  2. 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)

    @Author:Runsen @Date:2020/9/17 多重背包有三层循环,如果数据非常的大,那么程序就会变得非常悲伤.在多重背包的问题,其实更多的是考查多重背包的二进制优化方法.学习二进制优化 ...

  3. 九十、动态规划系列背包问题之多重背包

    @Author:Runsen 曾几何时,才记得自己还是大一军训的菜鸟,带着 迷茫和憧憬踏入大学,踏入化工学院,却踏入这个行业,殊不知岁月是最高明的小偷,偷走时间,带走青春,一点线索也不留.大学的玩命学 ...

  4. 背包九讲系列1——01背包、完全背包、多重背包

    我在进行一些互联网公司的技术笔试的时候,对于我来说最大的难题莫过于最后的那几道编程题了,这对算法和数据结构有一定程度上的要求,而"动态规划"又是编程题中经常出现的算法类型,并且对于 ...

  5. c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题. 在之前的文章当中,我们一起探讨了二分.贪心.排序和搜索算法,今天我们来 ...

  6. python多重背包问题_01-背包、完全背包、多重背包及其相关应用

    本文介绍了背包问题系列,主要包括: [1] 01-背包及其应用 [2]完全背包及其应用 [3]多重背包 [1]01-背包及其应用: 1.1.01-背包问题描述: 有 N 件物品和一个容量为 C 的背包 ...

  7. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  8. 单调队列多重背包时间复杂度O(vn)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...

  9. 背包问题(多重背包+0-1背包)

    一:0-1背包问题 #include<iostream> #include<algorithm> #include<cstring> const int maxn= ...

最新文章

  1. input type右对齐与只读的
  2. java搜索项目内的异常_java中用Lucene做搜索,在建索引时遇到的2个异常
  3. 唯一的hashCodes不足以避免冲突
  4. 用计算机弹可惜不是你,可惜不是你 还是幸亏不是你
  5. 求二叉树上结点的路径c语言版,求二叉树根到给定节点的路径设计报告.doc
  6. C#中的文件流和文本流
  7. .tar.bz2文件解压命令
  8. python tkinter获取屏幕大小_用 Python 制作关不掉的端午安康弹窗
  9. modbus 调试工具之modbus slave与modbus poll
  10. at89c51编程语言,(最新整理)AT89C51单片机简介
  11. synchronized-锁总结
  12. 希腊字母表(直接输入希腊字母的方法)
  13. 云计算的概念与价值02技术与价值
  14. 参加python全栈开发培训需要多少钱?
  15. 9.22生日——随笔
  16. CAD的图层过滤器有什么用?
  17. VR全景制作的展示方式你了解多少?具体有哪些?
  18. colab上传压缩文件并解压
  19. 国内android开发之墙痛,Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。...
  20. [国嵌攻略][054][NandFlash驱动设计_写]

热门文章

  1. 如何查看电脑jdk/jre版本以及安装路径
  2. 2,JESD204为什么值得关注?
  3. html构建复选框标签,什么标签用于在表单中构建复选框_HTML表单复选框INPUT标签...
  4. Yii中CGridView单元格组件和数据提供者的使用
  5. 作业5 | AR模型参数的估计
  6. 无人驾驶仿真软件PanoSim:(1)介绍
  7. 微信公众号:开发者工具下载、安装、使用
  8. AutoHotKey入门教程
  9. Python百度地图API,通过区县、村镇地址获取完整省市区行政区划
  10. CJSON 使用介绍