题目是问100块钱用现有的币值,有多少组成方式。

要注意的是,一开始用float,发现 5 / 0.1算出来是49.999多,原来浮点数是有误差的,所以大家都*10,用整数来除。

方法一:用递归

#include <iostream>
using namespace std;int num[8];
int money[8] = {1, 5, 10, 50, 100, 200, 500, 1000};
int nums = 0;
float total;void f(int index, float current)
{if (index >= 8)return;if (current > total)return;if (index == 7 && current == total){nums++;for (int i = 0; i < 8; i++){cout <<  float(float(money[i])/10) << " : " << num[i] << ", ";}cout << endl;}for (int i = 0; i <= (total-current) / money[index]; i++){num[index] = i;f(index + 1, current + money[index] * num[index]);}
}int main()
{cin >> total;total = total * 10;for (int i = 0; i < 8; i ++){num[i] = 0;}int current = 0;f(0, current);cout << nums << endl;nums = 0;
}

但是,用递归算法效率差了点,想想是否可以用DP。

方法二:用DP

效率变快好多。

f[k] 记录组成k元有多少组成方式。

当遍历到money[i]时,f[k]记录的是用money[0] - money[i-1]的币值可以组成k元的组成方式的个数。

那么到money[i]时,观察f[k],如果f[k] > 0,代表之前可以组成k元,然后加入j个money[i] 就可以组成k+money[i] * j 元。

且k+money[i] * j 元的组成方式的个数要加上f[k]。

用数组g代表当前money[i]时的情况,否则新产生的值会和上一轮的f的值混淆。到这一轮结束以后,再把g的值加到f的值之上即可。

想起来这道题好像以前做过类似的:)

#include <iostream>
using namespace std;int money[8] = {1, 5, 10, 50, 100, 200, 500, 1000};int main()
{int N;cin >> N;while(N-- > 0){int total;cin >> total;total = total * 10;long long *f = new long long[total+1];long long *g = new long long[total+1];for (int i = 0; i <= total; i ++){f[i] = 0;g[i] = 0;}for (int j = 1; j <= total / money[0]; j++){f[money[0] * j]++;}for (int i = 1; i < 8;  i++){for (int j = 1; j <= total/ money[i]; j++){g[money[i] * j]++;}for (int k = 0; k <= total; k++){if (f[k] > 0){for (int j = 1; j <= (total - k) / money[i]; j++)g[k + money[i] * j] += f[k];}}for (int k = 0; k <= total; k++){f[k] += g[k];g[k] = 0;}}cout << f[total] << endl;}
}

100块钱有多少组成方式相关推荐

  1. 入职三天,公司给了100块钱叫我走人

    十月,金秋季节,本是丰收之时,却因为陆续有同事离职,心中多少有些悲凉之意,顿然想起从参加工作到现在,五年已过,当年青涩懵懂的小年轻,如今出街招摇过市时,被小孩子看到都会喊声大叔.回想这五年,有心酸和无 ...

  2. 入职三天,公司给了100块钱叫我走人!

    本文来源公众号:编程无界,是作者本人的亲身经历,希望对大家有所帮助! 十月,金秋季节,本是丰收之时,却因为陆续有同事离职,心中多少有些悲凉之意,顿然想起从参加工作到现在,五年已过,当年青涩懵懂的小年轻 ...

  3. 入职三天,公司给了100块钱叫我走人| 掘金技术征文

    十月,金秋季节,本是丰收之时,却因为陆续有同事离职,心中多少有些悲凉之意,顿然想起从参加工作到现在,五年已过,当年青涩懵懂的小年轻,如今出街招摇过市时,被小孩子看到都会喊声大叔.回想这五年,有心酸和无 ...

  4. 如何在2小时内用1块钱赚到100块钱?

    本文来源:道君说财(微信公众号:touzijuiebu) 这篇文章将会告诉大家,如何跳出自己的思维去看待问题.跳出思维的盒子,你的生活也会增加许多可能性. 如何在2小时内用1块钱赚到100块钱? 别担 ...

  5. 用100元买100支笔c语言,用C编程!有100块钱,买100支笔,其中钢笔3元,圆珠笔2元,铅笔0.5元,问各买多少支?...

    题目: 用C编程!有100块钱,买100支笔,其中钢笔3元,圆珠笔2元,铅笔0.5元,问各买多少支? 解答: 完整程序如下: main(){ int i3,i2,i05; for (i3=0;i3 猜 ...

  6. 报表软件公司悬赏 BUG,100块钱1个的真实用意

    上一篇文章我讲到,报表软件FineReport一反常态,做了个<提BUG,拿现金>的活动,1个BUG,100块钱.纵览软件行业,如金蝶用友浪潮IBM微软等国内外巨头,均没有这样的举动去征集 ...

  7. 一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(不许解方程),怎么实现?编写java程序。...

    一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(不许解方程),怎么实现?编写java程序. public class A {public static void ma ...

  8. 一道经典的面试题:一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(编写java程序)...

    一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(不许解方程),怎么实现?编写java程序. public class BuyChicken { public stat ...

  9. 有100块钱,每3块钱可以买一瓶汽水,每3个瓶子可以换一瓶汽水。问最后能买几瓶汽水

    package com.ligong;public class Demo51 {public static void main(String[] args) {/** 有100块钱,每3块钱可以买一瓶 ...

最新文章

  1. SAP WM中阶之LT25确认Group中的TO单据
  2. Python-OpenCV 处理视频(五): 运动方向判断
  3. 计算机网络的协议与体系结构
  4. javascript与DOM的渊源
  5. mysql 5.7.13安装_安装MySQL 5.7.13
  6. [arm驱动]linux内核中断编程
  7. 最幸福的事就是吃饺子
  8. 初学者Git和GitHub简介(教程)
  9. 国外html游戏发展历史,17个国外游戏行业的网页设计欣赏
  10. java服务器代码_简单java服务器
  11. 零基础学python实战-苦苦发愁学习Python?让你享受 7天 掌握Python的感觉
  12. Flume-NG源码阅读之Interceptor(原创)
  13. C#旅程——ListView控件使用
  14. IDEA web项目导出 war 包
  15. 接口测试平台代码实现16:吐槽功能后台实现+orm初识
  16. 将word转换html格式的文件,word 保存成 html格式文件
  17. 从0到1构建计算机(3/12)--组合逻辑芯片:逻辑门、加法器、ALU
  18. A - The Fool HDU - 6555
  19. html把一张图片动态的代码,原神:4张动态图演示168皮肤琴的实机效果,三种玩家可入手...
  20. 获取手机的IMEI与IMSI

热门文章

  1. [逆向]汇编JCC指令举例
  2. Redis配置文件详解
  3. 大学生开学必备物品清单男生2022 大学生开学必备物品男生
  4. 边工作边学习的现实选择
  5. conda 导出环境文件的方法(文件方法)
  6. python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
  7. tikz包 安装_TeX系列: tikz pgf 宏包安装步骤
  8. Java绘图,图像处理
  9. 2021-2025年中国脱水泵行业市场供需与战略研究报告
  10. 有向图的强联通分量之:【求最长链】【求最长链的方案数(图论中的方案数DP)】【最长链和最大半联通子图 节点数相同】【最长链与最大半联通子图等价又不完全等价】