2019独角兽企业重金招聘Python工程师标准>>>

namespace 枚举与枝剪
{/*     * 要找8元钱     * 有5元、2元、1元、5角     * 求所有解决方案     */    class Program    {static void Main(string[] args){//初始化,由于其中涉及到浮点运算,所以每位*10            int total = 80;//80角            int _50 = 50;int _20 = 20;int _10 = 10;int _5 = 5;//50角,最少0张 最多80/50            for (int a = 0; a <= total / _50; a++){for (int b = 0; b <= total /_20; b++){for (int c = 0; c <= total / _10; c++){for (int d = 0; d <= total / _5; d++){if (a * _50 + b * _20 + c * _10 + d * _5 == total){Console.WriteLine("5元=" + a + ",2元=" + b + ",1元=" + c + ",5角=" + d);}}}}Console.ReadLine();}}}
}

以上算法未用到“枝剪”,如果运算的数字大一些,例如:800元,十几种零钞,这样计算机就吃不消了,大概要运算一年,因为以上考虑了太多没有意义的数据。例如:取了一张5元面值,不可能取足2张2元。“枝剪”就是去除这种过多的考虑,来增加运算效率

以下是用到“枝剪”的算法:

//初始化,由于其中涉及到浮点运算,所以每位*10            int total = 80;//80角            int _50 = 50;int _20 = 20;int _10 = 10;int _5 = 5;//50角,最少0张 最多80/50            for (int a = 0; a <= total / _50; a++){for (int b = 0; b <= total /_20; b++){//枝剪二:过滤非法情况,有可能ab取得过大的值,如果这个名额<0,就没有名额给下面分配了  if ((total - a * 50) < 0){break;}for (int c = 0; c <= total / _10; c++){//枝剪三if ((total - (a * _50 + b * _20 + c * _10)) < 0){break;}//前面的几种零钞,一共用掉了多少名额,剩下算出d                        int d = total - (a * _50 + b * _20 + c * _10) / _5;//枝剪一:d值根本不用算,因为可以用abc来求出                        //for (int d = 0; d <= total / _5; d++)                        //{                            if (a * _50 + b * _20 + c * _10 + d * _5 == total){Console.WriteLine("5元=" + a + ",2元=" + b + ",1元=" + c + ",5角=" + d);}//}                    }}Console.ReadLine();}

虽然更加混乱、难懂;但是运算速度和效率更快了

转载于:https://my.oschina.net/duansheli/blog/260867

【算法学习】枚举与剪枝(一)相关推荐

  1. 算法学习 -- 枚举

    在学习枚举算法之前,首先问有关枚举的几个问题 1. 为什么要进行枚举? 2. 需要对哪些对象进行枚举? 3. 如何进行枚举? 4. 枚举的结束条件是什么? 现在针对两个使用枚举算法的实例对以上问题进行 ...

  2. 算法学习——枚举之最简真分数

    算法描述 统计分母在指定区间[100,999]的最简真分数(分子小于分母,且分子分母无公因数)共有多少个,并求这些最简真分数的和 算法思路 对于指定区间,分母的枚举范围为 100~999 即是输入的a ...

  3. 算法学习--回溯和剪枝

    1. 回溯 1.1 回溯的应用场景 递归代表开启一个分支,如果希望这个分支返回后某些数据恢复到分支开启以前的状态以便重新开始,则需要用到回溯 1.2 典型例题 1.2.1 全排列 public cla ...

  4. 好久没有看到这么有建设性德文章,由衷地赞叹《知其所以然地学习(以算法学习为例)》-By 刘未鹏(pongba)

    知其所以然地学习(以算法学习为例) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) Updated(2008-7-24):更新见正文部分,有标注 ...

  5. 【基础】基础算法学习笔记(状态空间)

    基础算法学习笔记(状态空间) 一.状态空间 1.定义(什么是状态空间):一个实际问题的各种可能情况构成的集合.(解释:为什么需要算法来和程序来处理问题?如果一道题可以手算得到答案,换句话说就是存在通过 ...

  6. 算法学习之道,应有三重境界

    https://www.toutiao.com/a6712297555167805966/ 王国维先生在<人间词话>中写道:古今之成大事业.大学问者,必经过三种境界:"昨夜西风凋 ...

  7. 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)

    数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...

  8. 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记

    算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...

  9. 算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记

    算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记 前言 单调队列 场景举例(RMQ) 应用-维护区间最值的方式 数据结构-自行设计单调队列 代码实现(java) 例题分析(略) 总 ...

  10. 数据结构与算法学习⑥(动态规划 题解 背包和打家劫舍问题)

    数据结构与算法学习⑥(动态规划 动态规划 1.初识动态规划 1.1.从贪心说起 1.1.1.贪心的特点 1.1.2.贪心的局限性 1.1.3.贪心失效后怎么办 1.1.4.从最优化问题到递归 1.2. ...

最新文章

  1. [LintCode] Fast Power
  2. iOS模块器截屏闪退
  3. oracle 用户总是 频繁的被锁定 的解决办法
  4. Redis面试常见问题与详解
  5. Vue的表单组件之下拉框
  6. oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
  7. 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现
  8. EasyUI的简单介绍
  9. oracle pga建议值,Oracle PGA作用
  10. html 日志记录组件,使用HTML自定义格式的Log4j.properties进行日志记录
  11. 微信里文件小程序导不出来_懒得打开电脑传文件?这四类小程序把这事解决了-小程序视频怎么发在电脑上...
  12. wpf image控件循环显示图片 以达到动画效果 问题及解决方案
  13. ps cs6破解补丁使用方法
  14. LM2596电源模块原理图及PCB分享
  15. Egencia smartmix航班排名模型背后的运营研究
  16. 数据库修改表中的数据(SqlServer)
  17. ArduinoMega2560 引脚表
  18. sql语句中GROUP BY 和 HAVING的使用 count()
  19. 你了解HTTP2协议吗?(二)
  20. js制作12进制的时钟特效

热门文章

  1. ITK:使用曲率流平滑图像
  2. VTK:可视化之HideAllActors
  3. VTK:PolyData之TriangleColoredPoints
  4. VTK:网格之Subdivision
  5. VTK:隐式函数之SampleFunction
  6. VTK:IO之GLTFExporter
  7. VTK:IO之FindAllArrayNames
  8. VTK:Filtering之SelectionSource
  9. OpenGL屏幕空间环境光遮挡的实例
  10. C语言实现大数的阶乘(附完整源码)