很容易看出来是一个背包问题,开始把每一张钞票都跑了一遍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相关推荐

  1. 【POJ】1276 Cash Machine 【背包问题】

    1 思路 多重背包问题,可以将其化为01背包问题. 若用一般方法必TLE(把n个第i种物品看成毫无关联的n个物品,即∑ ni i = 1,2-N个物品(N为物品数目)) 采用二进制思想,把n个第i种物 ...

  2. Cash Machine POJ - 1276

    解法 多重背包板子题 多重背包板子 如果上限的体积大于了给定的体积那么套完全背包 否则二进制优化成01背包 代码 #include <iostream> #include <cstr ...

  3. POJ 1276 ATM凑钱(动态规划)(未解答)

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted代码 1. 题目 1.1 题目链接 http://poj.org/problem?id= ...

  4. 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 ...

  5. poj 1276 多重背包

    #include <iostream> using namespace std; int cash, n, m[13], d[13]; int f[100100]; int money, ...

  6. POJ 2455Secret Milking Machine(二分+网络流之最大流)

    题目地址:POJ2455 手残真浪费时间啊..又拖到了今天才找出了错误..每晚两道题不知不觉又变回了每晚一道题...sad.. 第一次在isap中忘记调用bfs,第二次则是遍历的时候竟然是从1開始遍历 ...

  7. POJ 2724 Purifying Machine (二分图匹配)

    题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...

  8. zoj 1366 Cash Machine

    01背包加变形 动态规划的时候就犯浑了,每个状态都要记录的,我却只记录了当前状态的!! #include<stdio.h> #include<string.h> int max ...

  9. 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 ...

最新文章

  1. [解题报告] The Collatz Sequence
  2. BZOJ3534:[SDOI2014]重建(矩阵树定理)
  3. SSIS同步多个数据库
  4. 如何把控产品 — 产品管理全流程解析
  5. C语言中队列、堆栈、内存映射、多线程概念
  6. linux一g运行内存不足,在linux运行weblogic出现运行内存不足错误,求鞭挞....
  7. clickhouse mysql引擎_MySQL 最优秀的替代品系列之五:Clickhouse 视图的神奇用法
  8. 企业云桌面-01-安装第1台域控制器和第1台DNS服务器-011-DC01
  9. 浅谈Hybrid技术的设计与实现【转】
  10. 软件测试入门基础自卸
  11. linux蚂蚁矿池教程,蚂蚁矿机Z9使用教程
  12. 20180329整理巡检系统代码
  13. linux不可用于文件名的符号,Linux 文件名中包含特殊字符
  14. hannoi塔(汉诺塔)移动过程解析
  15. 二叉平衡树复杂度!!!
  16. PHP计算每个月有多少工作日
  17. Android日常开发收集的Tips
  18. ATLAS/ICESAT-2 NASA 数据产品详细介绍及相关说明文档
  19. 合同相似可逆等价矩阵的关系及性质_矩阵的合同,等价与相似的联系与区别.doc...
  20. 探索java的 protect/private变量

热门文章

  1. 设计模式09----门面设计模式
  2. Cookie和Session简介与区别
  3. sql alter表字段处理
  4. b站在线解析_这款游戏被全B站所唾弃,每个月却依然有5000万玩家坚持在线?!...
  5. matlab 判断对象的数据类型isa()
  6. Wireshark图解教程(简介、抓包、过滤器)
  7. ACM 网址和一些建议
  8. libuv 原理_Libuv初理解
  9. springboot redis 断线重连_Redis高可用方案实现
  10. 计算机的就业指导论文,计算机就业指导期刊文章参考文献 计算机就业指导专著类参考文献有哪些...