一、什么是贪心策略呢?
贪心算法是一种递推算法,用局部最优解来推导全局最优解,是对遍历解空间的一种优化
当问题具有最优子结构时,可用动态规划,而贪心是动态规划的一种特例

  • 特点:

只看眼前
遵循某种规则,不断(贪心)选取当前最优策略,最终找到最优解。
难点:当前最优解未必是整体最优。

  • 二、题目:硬币问题

有1元,5元,10元,50元,100元,500元的硬币各c1,c5,c10,c50,c100,c500枚,现在要用这些硬币来支付A元,最少需要多少枚硬币?
假定本题至少存在一种支付方案
0<=ci<=10^9
0<=A<=10^9


输入:
第一行有6个数字,分别代表从小到大6中面值的硬币个数
第二行为A,代表需要支付的A元。
样例:
输入:
3 2 1 3 0 2
620
输出
6


分析思路:
要求用最少的硬币数量来解决问题
从一般角度思考,首先使用最大的面额500元一张,100元一张,10元2张。
但是,在样例中并没有100元的,所以仍然是500元一张,50元2张,10元2张

上面有很多种可以选择的路,找到最优的,一直按这种最优的走下去。例如:第一张就选择500的,之后再找剩下的最优的

  • 代码
package cointanxin;import java.util.Scanner;public class Cion {public static void main(String[] args) {Scanner sc=new Scanner(System.in);for(int i=0;i<6;i++) {cnts[i]=sc.nextInt();}int A=sc.nextInt();int res=f(A,5);//当前面值最大的硬币,下标为5System.out.println(res);}static int[] cnts=new int[6]; //一开始就选择下标为最大的500static int[] coins= {1,5,10,50,100,500};//尽量选取最大面值,若不选取最大面值,将使用更多小面值的硬币,一定得不到最优解static int f(int A,int cur) {if(A<=0)return 0;if(cur==0)return 0;int coinValue=coins[cur];  int x=A/coinValue;  //当前面值的硬币有cnt个int cnt=cnts[cur];  //当前面的硬币有cnt个int t=min(x,cnt);return t+f(A-t*coinValue,cur-1); //用t个当前面值,剩下的继续处理}
}

硬币支付问题(贪心策略)相关推荐

  1. Java实现求解硬币问题有1分、2分、5分、10分、50分和100分的硬币各若干枚,现在要用这些硬币支付W元,最少需要多少枚硬币?利用贪心法的思想进行编程

    求解硬币问题.有1分.2分.5分.10分.50分和100分的硬币各若干枚,现在要用这些硬币支付W元,最少需要多少枚硬币? 1.我解决该问题编程的思路如下: 首先是利用一个数组A存储硬币面额,再利用另外 ...

  2. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  3. 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)

    1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...

  4. 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

    对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

  5. 贪心策略取得最优解的条件_什么是贪心算法?

    一.什么是贪心算法 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.(局部最优解,而不是整体最优解) 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择.必须注意的是,贪心算法不 ...

  6. 贪心策略--16经典问题总结!

    贪心算法 编号 题目 1货郎担 问题: 货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解. 贪心选择:每次选择之前没有走过的费用 ...

  7. 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)

    内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...

  8. 贪心策略构筑“奶牛铁塔”(洛谷P2676题题解,Java语言描述)

    题目要求 P2676题目链接 分析 哈哈哈,好一个"超级书架"+"奶牛铁塔",哈哈哈-- 这题就是用贪心策略,需要排一个序,然后每次选最高大强壮的奶牛加入&qu ...

  9. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)

    题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...

最新文章

  1. NSString之Format
  2. XenApp_XenDesktop_7.6实战篇之十五:StoreFront的配置
  3. C/C 宏替换详解
  4. sklearn分类器算法:决策树与随机森林及案例分析
  5. Android 系统(270)---开机广播的简单守护以及总结
  6. 客户跟进中的一些小技巧
  7. 单片机原理及应用c语言版答案,单片机原理及应用(C语言版(周国运)习题答案.doc...
  8. cassandra数据库可视化工具
  9. [工具:iperf吞吐率测试工具 ]安装以及使用
  10. 一种轻量化多尺度的遥感跨模态图文检索方法
  11. 关于域名抢注:过期高PR域名抢注价值高吗?
  12. 24点游戏开发实例(Qt含源码)
  13. 《NEURAL READING COMPREHENSION AND BEYOND》解读(陈丹琦博士论文)
  14. 动手学习深度学习-跟李沐学AI-自学笔记(1)
  15. 【uniapp】将uni-app开发的安卓程序运行到雷电模拟器上进行调试
  16. Java的IO流 ,BIO NIO AIO 的区别?
  17. Kaggle新赛:Lyft 自动驾驶运动预测,发布迄今最大预测任务数据集
  18. 游戏感:虚拟感觉的游戏设计师指南——第十三章 超级马里奥兄弟
  19. 美团点评技术与算法文章汇总,设计算法、前后端、客户端、小程序等
  20. CTO与CIO选型数据中台的几大建议

热门文章

  1. 如何自学python-如何自学python语言
  2. python单词的含义-学Python必背的初级单词,你都背了吗?
  3. python是什么类型的语言-编程语言分类及python所属类型
  4. python基础教程pdf-Python基础教程(第3版) PDF高清完整版免费下载|百度云盘
  5. python所有软件-Python和pip,列出可用的软件包的所有版本?
  6. python怎么读取中文文件-Python中使用不同编码读写txt文件详解
  7. css 文字超出隐藏显示省略号
  8. Vue实现可折叠导航菜单~非常详细
  9. SpringBoot 实现登录验证码(附集成SpringSecurity)
  10. repo打了 tag之后如何提交tag_技术开发者应该如何构建小团队的微服务方案?