贪心法求解硬币问题和乘船问题
贪心算法基本要素:
- 贪心选择性质:问题的最优解可以通过贪心选择实现(也就是先实现局部最优解,然后整体最优解可以通过一系列局部最优的选择来达到)
- 最优子结构性质:问题的最优解包含子问题的最优解
贪心算法步骤:
- 通过数学模型来描述问题
- 把求解问题分成多个子问题
- 对每一个子问题进行求解,找到局部最优解
- 把子问题的局部最优解合成原来解问题的一个解
贪心算法和动态规划区别
贪心法 | 贪心算法是自顶向下的,只查看了当前状态 | 贪心算法,仅在当前状态下做出最好选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。 |
最优子结构性质 贪心选择性质 |
动态规划 | 动态规划自底向上地求解了最优解包含的所有子问题 | 动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题时才能做出选择 |
最优子结构性质 重叠子问题性质 |
贪心法求解硬币问题:就是想办法多用面额比较大的硬币
问题描述:有1分,2分,5分,10分,50分,100分的硬币各若干枚,现在要用这些硬币来支付 W元,最少需要多少枚硬币?
代码:
#include<iostream>
using namespace std;
int V[6] = { 1,2,5,10,50,100};
int main()
{int C[10]; //代表硬币个数int W;for (int i = 0;i < 6;i++) {cin >> C[i]; //若干硬币的数量}cin >> W; //总金额int count = 0;for (int i = 5;i >= 0;i--){int t = min(W/ V[i], C[i]); W -= t * V[i];count += t;}cout << "最少需要硬币数量"<<count << endl;return 0;
}
贪心法求解乘船问题 :从给出的条件分析问题的话,则是先对这些人的体重进行排序,从低到高,然后最重的和最轻的加在一起的体重是否大于船的承载重量,进而判断做出选择。
问题描述: 有n个人,第i个人的体重为wi(0<=i<n)。每艘船的最大载重量均为C,且最多只能成两个人。试用最少的船装载所有人。
关于这道题,我用到了一个排序函数sort(),
sort()是C++给的一种排序函数,头文件为 #include <algorithm>
语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。
cmp的话,可以是function,然后在main函数外面定义它的功能,这样就可以实现按照这个函数function进行排序了。
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{int i, j ,C,count=0; //i代表轻的人,j代表重int n, w[100];cin >> n>>C;for (int k = 0;k < n;k++){cin >> w[k];}sort(w,w+n);for (i = 0, j = n - 1;j>=i;){if (w[i] + w[j] == C || w[i] + w[j] < C){count++;i++;j--;}else{count++;j--;}}cout << "最少的船只数量为:" << count << endl;;return 0;
}
贪心法求解硬币问题和乘船问题相关推荐
- 贪心法求解背包问题 C++
1.问题描述 背包问题是给定n个重量为{w1, w2,- ,wn}.价值为{v1, v2, - ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合 ...
- 【挑战程序设计竞赛】- 2.2贪心法(硬币最少、区间覆盖、字典序最小、标记最少、木板切割)
四年前犯的错再做一遍还是会犯. 四年前不看presentation要求,四年后依然PE. 四年前忘记longlong,四年后还是会忘. 2.2 贪心法 核心思想:不断选取最优策略. 例题1-硬币:有1 ...
- java活动安排_贪心法求解活动安排(java实现)
贪心法描述: 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优 ...
- 贪心法求解汽车加油问题
文章目录 问题内容 贪心法思想 问题分析 代码 结果展示 遇到的问题 问题内容 已知一辆汽车加满油后可行驶d(如d=7)km,而旅途中有若干个加油站.编写一个实验程序指出应在哪些加油站停靠加油,使加油 ...
- 贪心法求解磁盘驱动调度问题
磁盘驱动调度问题 题目: 输入一个请求序列: 98,183,37,122,14,124,65,67 n=8 假设磁头一开始的位置start处于c(c不在序列中的任何位置),例如c=53 如果采用最短寻 ...
- 基于贪心法及其改进算法求解旅行商问题(附代码)
旅行商问题 TSP (Traveling Salesman Problem)又称旅行推销员问题是指对于给 定的 n 个城市旅行商从某一城市出发不重复地访问其余每一城市后回到出发的城市 寻找一条使总旅行 ...
- 《挑战程序设计竞赛》2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262
POJ3617 Best Cow Line 题意 给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 ...
- 贪心法——活动安排问题
贪心法--活动安排问题 贪心法 贪心法的本质可以认为是动态规划在特定条件下的优化.贪心法满足两个性质,最优子结构性质和贪心选择性质. 满足最优子结构性质意味着问题可以被层层分解为子问题,这些子问题构成 ...
- 贪心算法求解 TSP 旅行商问题及其实现
文章目录 一.TSP 概述 1. TSP 2. 数学模型 3. TSP分类 二.贪心算法 1. 算法思路 2. 算法框架 3. 问题 三.贪心算法求解 TSP 一.TSP 概述 1. TSP 旅行商问 ...
最新文章
- CALayer 一些简单的小例子
- 参数注入:不使用xml,使用java配置参数的方法,以前的spring的方法
- .Net中XML,JSON的几种处理方式
- (十二)boost库之多线程高级特性
- 下列属于计算机人工智能应用领域的是多选题,每天五道选择题(10)
- 能用机器完成的,千万别堆工作量|持续集成中的性能自动化测试
- MUI 图标显示不出来 - 分析篇
- SpringBoot迭代发布下的Jar瘦身实践
- 常用的C语言函数介绍
- win10搭建无盘服务器配置,win10电脑搭建无盘工作站
- Elasticsearch节点类型
- 变频器压频比的正确设置方法
- 多线程设计实例——Monte Carlo法估算圆周率
- 【f1c200s/f1c100s】RGB接口 LCD驱动适配
- A problem has been detected and windows has been shut down to prevent damage to your computer.
- 液压传动与气动技术【2】
- android 高通手机精品游戏合集
- html文本内容自动滚动,网页HTML代码滚动文字制作
- R语言分组画条形图——qplot
- 视频播放可弹出弹幕,关闭弹幕