2014-03-20 04:04

题目:给你不限量的1分钱、5分钱、10分钱、25分钱硬币,凑成n分钱总共有多少种方法?

解法:理论上来说应该是有排列组合的公式解的,但推导起来太麻烦而且换个数据就又得重推了,所以我还是用动态规划解决。

代码:

 1 // 9.8 Given unlimited quarters(25 cents), dimes(10 cents), nickels(5 cents) and pennies(1 cent), how many ways are there to represent n cents.
 2 #include <cstdio>
 3 #include <vector>
 4 using namespace std;
 5
 6 // f(n, 1) = 1;
 7 // f(n, 1, 5) = sigma(i in [0, n / 5]){f(n - i * 5, 1)};
 8 // f(n, 1, 5, 10) = sigma(i in [0, n / 10]){f(n - i * 10, 1, 5)}
 9 // f(n, 1, 5, 10, 25) = sigma(i in [0, n / 25]){f(n - i * 25, 1, 5, 10)}
10 int main()
11 {
12     int n;
13     vector<vector<long long int> > v;
14     const int MAXN = 1000000;
15     const int c[4] = {1, 5, 10, 25};
16
17     int i, j;
18     v.resize(2);
19     for (i = 0; i < 2; ++i) {
20         v[i].resize(MAXN);
21     }
22     int flag = 1;
23     int nflag = !flag;
24     for (i = 0; i < MAXN; ++i) {
25         v[0][i] = 1;
26     }
27
28     for (i = 1; i < 4; ++i) {
29         for (j = 0; j < c[i]; ++j) {
30             v[flag][j] = v[nflag][j];
31         }
32         for (j = c[i]; j < MAXN; ++j) {
33             v[flag][j] = v[nflag][j] + v[flag][j - c[i]];
34         }
35         flag = !flag;
36         nflag = !nflag;
37     }
38     flag = !flag;
39     nflag = !nflag;
40
41     while (scanf("%d", &n) == 1 && n >= 0 && n < MAXN) {
42         printf("%lld\n", v[flag][n]);
43     }
44     for (i = 0; i < 2; ++i) {
45         v[i].clear();
46     }
47     v.clear();
48
49     return 0;
50 }

转载于:https://www.cnblogs.com/zhuli19901106/p/3612799.html

《Cracking the Coding Interview》——第9章:递归和动态规划——题目8相关推荐

  1. [Free] Cracking the Coding Interview 6th Download

    [Free] Cracking the Coding Interview 6th Download 推荐给有梯子的童鞋们! https://www.pdfdrive.com/cracking-the- ...

  2. Cracking the coding interview

    转自:http://hawstein.com/posts/ctci-solutions-contents.html Cracking the coding interview--问题与解答 March ...

  3. 经典算法题目:Cracking the coding interview 问题与解答

    Cracking the coding interview--问题与解答 March 14, 2013 作者:Hawstein 出处: http://hawstein.com/posts/ctci-s ...

  4. 渣基础:比照Hawstein学Cracking the coding interview(1)

    <C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...

  5. 《Cracking the Coding Interview》——第3章:栈和队列——题目4

    2014-03-18 05:28 题目:你肯定听过汉诺威塔的故事:三个柱子和N个从小到大的盘子.既然每次你只能移动放在顶上的盘子,这不就是栈操作吗?所以,请用三个栈来模拟N级汉诺威塔的玩法.放心,N不 ...

  6. 《Cracking the Coding Interview》——第18章:难题——题目11

    2014-04-29 04:30 题目:给定一个由'0'或者'1'构成的二维数组,找出一个四条边全部由'1'构成的正方形(矩形中间可以有'0'),使得矩形面积最大. 解法:用动态规划思想,记录二维数组 ...

  7. 《Cracking the Coding Interview》——第6章:智力题——题目5

    2014-03-20 01:08 题目:扔鸡蛋问题.有一个鸡蛋,如果从N楼扔下去恰好会摔碎,低于N楼则不碎,可以继续扔.给你两个这样的鸡蛋,要求你一定得求出N,怎么扔才能减少最坏情况下的扔的次数? 解 ...

  8. 《Cracking the Coding Interview》——第18章:难题——题目3

    2014-04-29 01:02 题目:从m个整数里随机选出n个整数,要求等概率. 解法:和洗牌的算法类似,每次随机抽出一个数,抽n次即可.时间复杂度O(m * n),空间复杂度O(m). 代码: 1 ...

  9. 《Cracking the Coding Interview》——第16章:线程与锁——题目3

    2014-04-27 19:26 题目:哲学家吃饭问题,死锁问题经典模型(专门用来黑哲学家的?). 解法:死锁四条件:1. 资源互斥.2. 请求保持.3. 非抢占.4. 循环等待.所以,某砖家拿起一只 ...

最新文章

  1. 逆转线性单链表 c语言,单链表的逆转,不会做啊
  2. CDN百科第七期 | 关于CDN的原理、术语和应用场景那些事
  3. 工作166:错误的处理方式
  4. 【每日学习】Apache重写未开启,导致The requested URL /xxxx.html was not found on this server...
  5. java 反射获取修饰符_java之反射和BeanUtils类
  6. linux下编辑文件实验,Linux上最常用的文本编辑器vi/vim使用教程
  7. 调用阿里API创建阿里云主机
  8. java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误时的原因及解决办法
  9. [POJ2195]Going Home(带权最大匹配,KM,最小费用流)
  10. 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计
  11. Java冒泡排序代码实现
  12. ramdump crash工具
  13. 华三交换机配置vrrp_h3c vrrp配置实例
  14. Mac 下修改eclipse内存设置
  15. 解决:ORA-06502: PL/SQL: numeric or value error: NULL index table key value
  16. matlab设计误码率,通信原理课程设计报告 数字传输系统误码率测试器的matlab实现及性能分析...
  17. 程序员如何防止加班猝死
  18. c#构造函数 例子学习
  19. 领域驱动设计(DDD)之领域专家
  20. 2018最新Java实战开发今日头条资讯网站

热门文章

  1. kafka key的作用_kafka系列(kafka端到端原理分析)
  2. Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message
  3. OllyDbg笔记-初识PE文件(nag窗口破解)
  4. C++ opengl 点的绘制
  5. Qt工作笔记-使用QCustomplot实现鼠标拖动数据点画曲线
  6. C/C++信息隐写术(四)之大程序藏入BMP文件
  7. HTML期末大作业-小米商城
  8. ad采样做按键开关_电池应用中的电流采样电阻设计
  9. 基于云原生2.0,华为云沃土云创计划全面使能伙伴创新升级
  10. python设置label的位置_Python3 tkinter基础 Label pack 设置控件在窗体中的位置