旅行家算法(贪心算法)
2019独角兽企业重金招聘Python工程师标准>>>
问题描述
一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。
输入格式
第一行为4个实数D1、C、D2、P与一个非负整数N;
接下来N行,每行两个实数Di、Pi。
输出格式
如果可以到达目的地,输出一个实数(四舍五入至小数点后两位),表示最小费用;否则输出“No Solution”(不含引号)。
样例输入
275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
样例输出
26.95
思路:是找在最大行驶距离内寻找比当前便宜的加油站,然后判断是否能一次到达,不能的话先加满,然后一个一个判断直到剩下的油量不足到下一个加油站就加油,加适量。
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
double d[10000], p[10000]; //出发点每升汽油的价格p
int main()
{ios::sync_with_stdio(false); //取消cin在stdin上的同步,增加cin的读取效率double d1, c, d2; int n; //沿途油站数目cin >> d1 >> c >> d2 >> p[0] >> n;d[n + 1] = d1; //第n个油站后即为最后的站点for (int i = 1; i <= n; i++) //输入每一个油站离出发点的距离以及每个站点汽油的价格{cin >> d[i] >> p[i];}int pos = 0;double remain = 0, cost = 0;do{bool found = false; //判定能不能到达for (int i = pos + 1; i <= n + 1 && d[i] <= d[pos] + c*d2; i++) //循环判断加满油能不能到达下一个加油站{if (p[i] < p[pos]) //判断下个站点汽油的价格是不是比这个pos站点汽油的价格小{if (d[pos] + remain*d2 >= d[i]) //若是剩余的油足够,刚好开过去{remain -= (d[i] - d[pos]) / d2; //剩余的油减少,减少量就是从一个站点到下一个站点用到的油}else //剩余的油不够{cost += ((d[i] - d[pos]) / d2 - remain)*p[pos]; //还需要加的油花费的价钱,不用加满remain = 0; //到达下一个站点恰好没油了,所以剩余汽油量清0}pos = i;found = true;break;}}if (!found){cost += (c - remain)*p[pos]; //不能到达前花费了多少钱remain = c - (d[pos + 1] - d[pos]) / d2; //还剩多少油if (remain >= 0) pos++; //小于0,油根本不够到达下一个站点,大于0,代表可以去下一个加油站else{cout << "No Solution";return 0;}}} while (pos <= n); //循环条件:没到达终点cout.setf(ios::fixed); //以定点形式显示浮点数cout << setprecision(2) << cost;
}
亲,如果您感觉本文有用,请点个赞再走吧✌(>‿◠)!!
转载于:https://my.oschina.net/ZhenyuanLiu/blog/1841538
旅行家算法(贪心算法)相关推荐
- JavaScript 算法 -- 贪心算法
文章目录 贪心算法 例题一:分饼干 例题二:买卖股票的最佳时机 II 贪心算法 贪心算法是算法设计的一种方法. 期盼通过每个阶段的局部最优选择,从而达到全局的最优,但最后的结果不一定最优. 例题一:分 ...
- [python算法]贪心算法+实例
目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...
- 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题
packageBasePart;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException ...
- 基础算法 —— 贪心算法
[概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...
- 数据结构与算法 / 贪心算法
一.诞生原因 有如下场景:针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大. 为了达到上述目的,贪心算法是其中的一个解决方案. 例如,路径选择问题,从 S ...
- 算法 - 贪心算法(集合覆盖问题求解)
1.穷举法 2.贪心算法 遍历集合的key,用当前key的value和allAreas去取交集),然后和(maxKey和allAreas的交集)比较大小,如果当前key的结合size大就把当前key赋 ...
- 基础算法 —— 贪心算法
[概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...
- 算法——贪心算法解0-1背包问题
问题的描述 我们先根据一个贪心算法的经典应用实例,然后给出贪心算法的实现步骤与关键环节,最后给出C++代码求解0-1背包问题. 背包问题(Knapsack Problem):有NN件物品有一个承重(也 ...
- 基础算法 -- 贪心算法
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易( ...
- C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...
最新文章
- sql charindex函数
- bzoj2618 [Cqoi2006]凸多边形
- vue3+TypeScript封装echarts5组件
- Sentinel(十二)之实时监控
- springMVC学习(7)-springMVC校验
- 共享充电宝“脱贫”:打脸王思聪 眼红了“负翁”ofo
- cisco 三层交换机作DHCP服务器的配置
- 疑 Android N 截图曝光,通知栏对比上一代变了不少
- vscode下载python库_如何在vscode中安装python库的方法步骤
- CityEngine 2014安装教程
- 你以为在做的是微服务?不!你做的只是分布式单体!
- 2021年南京市高考成绩查询,2021年南京各高中高考成绩排名及放榜最新消息
- 快速学习一门技术的逻辑
- 关于Unity中unitypackage文件的图标显示及打开方式异常问题的解决
- 【CTA】CTA认证要求打开日历时提示联系人权限确认
- 各软件版本、仓库、官网地址
- 天正服务器不显示,天正画图的时候图形消失看不见了怎么办?
- 我失业了,公司与我解除劳动合同关系
- HTTP状态码的含义
- Spring Data Redis 让 NoSQL 快如闪电(2)