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

旅行家算法(贪心算法)相关推荐

  1. JavaScript 算法 -- 贪心算法

    文章目录 贪心算法 例题一:分饼干 例题二:买卖股票的最佳时机 II 贪心算法 贪心算法是算法设计的一种方法. 期盼通过每个阶段的局部最优选择,从而达到全局的最优,但最后的结果不一定最优. 例题一:分 ...

  2. [python算法]贪心算法+实例

    目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...

  3. 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题

    packageBasePart;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException ...

  4. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  5. 数据结构与算法 / 贪心算法

    一.诞生原因 有如下场景:针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大. 为了达到上述目的,贪心算法是其中的一个解决方案. 例如,路径选择问题,从 S ...

  6. 算法 - 贪心算法(集合覆盖问题求解)

    1.穷举法 2.贪心算法 遍历集合的key,用当前key的value和allAreas去取交集),然后和(maxKey和allAreas的交集)比较大小,如果当前key的结合size大就把当前key赋 ...

  7. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  8. 算法——贪心算法解0-1背包问题

    问题的描述 我们先根据一个贪心算法的经典应用实例,然后给出贪心算法的实现步骤与关键环节,最后给出C++代码求解0-1背包问题. 背包问题(Knapsack Problem):有NN件物品有一个承重(也 ...

  9. 基础算法 -- 贪心算法

    题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易( ...

  10. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

    贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...

最新文章

  1. sql charindex函数
  2. bzoj2618 [Cqoi2006]凸多边形
  3. vue3+TypeScript封装echarts5组件
  4. Sentinel(十二)之实时监控
  5. springMVC学习(7)-springMVC校验
  6. 共享充电宝“脱贫”:打脸王思聪 眼红了“负翁”ofo
  7. cisco 三层交换机作DHCP服务器的配置
  8. 疑 Android N 截图曝光,通知栏对比上一代变了不少
  9. vscode下载python库_如何在vscode中安装python库的方法步骤
  10. CityEngine 2014安装教程
  11. 你以为在做的是微服务?不!你做的只是分布式单体!
  12. 2021年南京市高考成绩查询,2021年南京各高中高考成绩排名及放榜最新消息
  13. 快速学习一门技术的逻辑
  14. 关于Unity中unitypackage文件的图标显示及打开方式异常问题的解决
  15. 【CTA】CTA认证要求打开日历时提示联系人权限确认
  16. 各软件版本、仓库、官网地址
  17. 天正服务器不显示,天正画图的时候图形消失看不见了怎么办?
  18. 我失业了,公司与我解除劳动合同关系
  19. HTTP状态码的含义
  20. Spring Data Redis 让 NoSQL 快如闪电(2)

热门文章

  1. android的快速开发框架集合
  2. python——列表
  3. CSS---padding详解
  4. 单链表中倒数第K个结点
  5. springdata数据源的配置
  6. c语言中void *的使用
  7. Compact PCI总线知识整理
  8. 《语雀 IT 百科》发布了!
  9. 伊利诺理工大学计算机科学硕士,美国伊利诺伊理工大学计算机科学硕士
  10. linux 一次io大小,linux – AWS EBS中IO操作(IOP)的大小是多少?