硬币支付问题(贪心策略)
一、什么是贪心策略呢?
贪心算法是一种递推算法,用局部最优解来推导全局最优解,是对遍历解空间的一种优化
当问题具有最优子结构时,可用动态规划,而贪心是动态规划的一种特例
- 特点:
只看眼前
遵循某种规则,不断(贪心)选取当前最优策略,最终找到最优解。
难点:当前最优解未必是整体最优。
- 二、题目:硬币问题
有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个当前面值,剩下的继续处理}
}
硬币支付问题(贪心策略)相关推荐
- Java实现求解硬币问题有1分、2分、5分、10分、50分和100分的硬币各若干枚,现在要用这些硬币支付W元,最少需要多少枚硬币?利用贪心法的思想进行编程
求解硬币问题.有1分.2分.5分.10分.50分和100分的硬币各若干枚,现在要用这些硬币支付W元,最少需要多少枚硬币? 1.我解决该问题编程的思路如下: 首先是利用一个数组A存储硬币面额,再利用另外 ...
- Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...
- 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)
1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
- 贪心策略取得最优解的条件_什么是贪心算法?
一.什么是贪心算法 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.(局部最优解,而不是整体最优解) 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择.必须注意的是,贪心算法不 ...
- 贪心策略--16经典问题总结!
贪心算法 编号 题目 1货郎担 问题: 货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解. 贪心选择:每次选择之前没有走过的费用 ...
- 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...
- 贪心策略构筑“奶牛铁塔”(洛谷P2676题题解,Java语言描述)
题目要求 P2676题目链接 分析 哈哈哈,好一个"超级书架"+"奶牛铁塔",哈哈哈-- 这题就是用贪心策略,需要排一个序,然后每次选最高大强壮的奶牛加入&qu ...
- 贪心策略摘果子(洛谷P1478题题解,Java语言描述)
题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...
最新文章
- NSString之Format
- XenApp_XenDesktop_7.6实战篇之十五:StoreFront的配置
- C/C 宏替换详解
- sklearn分类器算法:决策树与随机森林及案例分析
- Android 系统(270)---开机广播的简单守护以及总结
- 客户跟进中的一些小技巧
- 单片机原理及应用c语言版答案,单片机原理及应用(C语言版(周国运)习题答案.doc...
- cassandra数据库可视化工具
- [工具:iperf吞吐率测试工具 ]安装以及使用
- 一种轻量化多尺度的遥感跨模态图文检索方法
- 关于域名抢注:过期高PR域名抢注价值高吗?
- 24点游戏开发实例(Qt含源码)
- 《NEURAL READING COMPREHENSION AND BEYOND》解读(陈丹琦博士论文)
- 动手学习深度学习-跟李沐学AI-自学笔记(1)
- 【uniapp】将uni-app开发的安卓程序运行到雷电模拟器上进行调试
- Java的IO流 ,BIO NIO AIO 的区别?
- Kaggle新赛:Lyft 自动驾驶运动预测,发布迄今最大预测任务数据集
- 游戏感:虚拟感觉的游戏设计师指南——第十三章 超级马里奥兄弟
- 美团点评技术与算法文章汇总,设计算法、前后端、客户端、小程序等
- CTO与CIO选型数据中台的几大建议
热门文章
- 如何自学python-如何自学python语言
- python单词的含义-学Python必背的初级单词,你都背了吗?
- python是什么类型的语言-编程语言分类及python所属类型
- python基础教程pdf-Python基础教程(第3版) PDF高清完整版免费下载|百度云盘
- python所有软件-Python和pip,列出可用的软件包的所有版本?
- python怎么读取中文文件-Python中使用不同编码读写txt文件详解
- css 文字超出隐藏显示省略号
- Vue实现可折叠导航菜单~非常详细
- SpringBoot 实现登录验证码(附集成SpringSecurity)
- repo打了 tag之后如何提交tag_技术开发者应该如何构建小团队的微服务方案?