POJ 1276 Cash Machine
很容易看出来是一个背包问题,开始把每一张钞票都跑了一遍01背包,直接TLE了。
其实就是多重背包模板题。
1 //#include <bits/stdc++.h> 2 #include <iostream> 3 #include <utility> 4 #include <vector> 5 #include <cstring> 6 using namespace std; 7 #define fst first 8 #define scd second 9 #define pb(x) push_back((x)) 10 #define mkp(x,y) make_pair((x),(y)) 11 #define ist(x) insert((x)) 12 typedef long long ll; 13 typedef pair<int ,int > pii; 14 typedef pair<ll ,ll > pll; 15 typedef vector< int > vi; 16 ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);} 17 ll qPow(ll a,ll b,ll mod){ ll ret=1ll;while(b){ if(b&1) ret=ret*a%mod;a=a*a%mod;b>>=1;} return ret; } 18 19 pii nD[13]; 20 int dp[100000+5]; 21 int nValue; 22 23 void ZeroOnePack(int cost , int weight){ 24 for(int i=nValue;i>=cost;i--) 25 dp[i]=max(dp[i],dp[i-cost]+weight); 26 } 27 28 void CompletePack(int cost , int weight){ 29 for(int i=cost;i<=nValue;++i) 30 dp[i]=max(dp[i],dp[i-cost]+weight); 31 } 32 33 void MultiplePack(int cost ,int weight,int amount){ 34 if(cost*amount>=nValue) CompletePack(cost , weight); 35 else{ 36 int k=1; 37 while(k<amount){ 38 ZeroOnePack(k*cost,k*weight); 39 amount-=k; 40 k<<=1; 41 } 42 ZeroOnePack(amount*cost,amount*weight); 43 } 44 } 45 46 int main(){ 47 int cash,N; 48 while(cin>>cash>>N){ 49 nValue=cash; 50 memset(dp,0,sizeof(dp)); 51 for(int i=0;i<N;++i) 52 cin>>nD[i].first>>nD[i].second; 53 for(int i=0;i<N;++i){ 54 MultiplePack(nD[i].second,nD[i].second,nD[i].first); 55 } 56 cout<<dp[cash]<<endl; 57 } 58 return 0; 59 }
View Code
转载于:https://www.cnblogs.com/Kiritsugu/p/9474752.html
POJ 1276 Cash Machine相关推荐
- 【POJ】1276 Cash Machine 【背包问题】
1 思路 多重背包问题,可以将其化为01背包问题. 若用一般方法必TLE(把n个第i种物品看成毫无关联的n个物品,即∑ ni i = 1,2-N个物品(N为物品数目)) 采用二进制思想,把n个第i种物 ...
- Cash Machine POJ - 1276
解法 多重背包板子题 多重背包板子 如果上限的体积大于了给定的体积那么套完全背包 否则二进制优化成01背包 代码 #include <iostream> #include <cstr ...
- POJ 1276 ATM凑钱(动态规划)(未解答)
文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted代码 1. 题目 1.1 题目链接 http://poj.org/problem?id= ...
- POJ 1276 完全背包
Sample Input 735 3 4 125 6 5 3 350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 10 10 Sample Ou ...
- poj 1276 多重背包
#include <iostream> using namespace std; int cash, n, m[13], d[13]; int f[100100]; int money, ...
- POJ 2455Secret Milking Machine(二分+网络流之最大流)
题目地址:POJ2455 手残真浪费时间啊..又拖到了今天才找出了错误..每晚两道题不知不觉又变回了每晚一道题...sad.. 第一次在isap中忘记调用bfs,第二次则是遍历的时候竟然是从1開始遍历 ...
- POJ 2724 Purifying Machine (二分图匹配)
题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...
- zoj 1366 Cash Machine
01背包加变形 动态规划的时候就犯浑了,每个状态都要记录的,我却只记录了当前状态的!! #include<stdio.h> #include<string.h> int max ...
- poj 1276 多重背包
735 3 4 125 6 5 3 350 //735的最大额,3种,4个125,6个5,3个350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 ...
最新文章
- [解题报告] The Collatz Sequence
- BZOJ3534:[SDOI2014]重建(矩阵树定理)
- SSIS同步多个数据库
- 如何把控产品 — 产品管理全流程解析
- C语言中队列、堆栈、内存映射、多线程概念
- linux一g运行内存不足,在linux运行weblogic出现运行内存不足错误,求鞭挞....
- clickhouse mysql引擎_MySQL 最优秀的替代品系列之五:Clickhouse 视图的神奇用法
- 企业云桌面-01-安装第1台域控制器和第1台DNS服务器-011-DC01
- 浅谈Hybrid技术的设计与实现【转】
- 软件测试入门基础自卸
- linux蚂蚁矿池教程,蚂蚁矿机Z9使用教程
- 20180329整理巡检系统代码
- linux不可用于文件名的符号,Linux 文件名中包含特殊字符
- hannoi塔(汉诺塔)移动过程解析
- 二叉平衡树复杂度!!!
- PHP计算每个月有多少工作日
- Android日常开发收集的Tips
- ATLAS/ICESAT-2 NASA 数据产品详细介绍及相关说明文档
- 合同相似可逆等价矩阵的关系及性质_矩阵的合同,等价与相似的联系与区别.doc...
- 探索java的 protect/private变量
热门文章
- 设计模式09----门面设计模式
- Cookie和Session简介与区别
- sql alter表字段处理
- b站在线解析_这款游戏被全B站所唾弃,每个月却依然有5000万玩家坚持在线?!...
- matlab 判断对象的数据类型isa()
- Wireshark图解教程(简介、抓包、过滤器)
- ACM 网址和一些建议
- libuv 原理_Libuv初理解
- springboot redis 断线重连_Redis高可用方案实现
- 计算机的就业指导论文,计算机就业指导期刊文章参考文献 计算机就业指导专著类参考文献有哪些...