题目描述
一个旅行家想驾驶汽车以最少的费用从一个城市 到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离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
思路:很明显的一个贪心题目(ps:不知道dp能不能做)。
对于我们当前的位置,我们很希望可以一下子跑到油价比当前位置便宜的地方。如果不能的话,我们只能把当前油箱装满,然后跑到下一个加油站,再重复这个操作。那么怎么找出油价比当前位置便宜的地方呢?利用单调栈来实现这一步骤。然后去执行上面的操作就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e5+100;
struct node{double pos,val;bool operator<(const node &a)const{return pos<a.pos;}
}p[maxx];
double val[maxx];
double D1,C,D2,P;
int R[maxx];
int n;int main()
{scanf("%lf%lf%lf%lf%d",&D1,&C,&D2,&P,&n);for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i].pos,&p[i].val);sort(p+1,p+1+n);p[n+1].pos=D1;p[n+1].val=0.0;p[0].pos=0.0;p[0].val=P;val[0]=P;for(int i=1;i<=n;i++) val[i]=p[i].val;stack<int> s;for(int i=n;i>=0;i--){while(s.size()&&val[s.top()]>val[i]) s.pop();if(!s.size()) R[i]=n+1;else R[i]=s.top();s.push(i); }double ans=0.0,res=0.0;//res代表当前剩的油int flag=1;for(int i=0;i<=n;){double no=(p[R[i]].pos-p[i].pos)/D2;if(no<=C) {ans+=max(no-res,0.0)*p[i].val;if(no>res) res=0.0;else res-=no;i=R[i];}else{no=(p[i+1].pos-p[i].pos)/D2;if(no>C) flag=0;ans+=(C-res)*p[i].val;res=C-no;i++;}}if(flag==0) cout<<"No Solution"<<endl;else printf("%.2lf\n",ans);return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][算法训练VIP]旅行家的预算(单调栈+贪心)相关推荐

  1. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  2. [蓝桥杯][算法训练VIP]方格取数(双线程dp)

    题目描述 设有N * N的方格图(N< =10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下 ...

  3. [蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)

    题目描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: 序列中的所有数都是不大于k的正整数: 序列中至少有两个数. 序列中的数两两不相等: 如果第i – 1个数比第i – 2个数大,则第i个数 ...

  4. [蓝桥杯][算法训练VIP]接水问题(思维)

    题目描述 学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1.现在有n名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从1到n编号,i号同学的 ...

  5. [蓝桥杯][算法训练VIP]单词接龙(DFS+String)

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都 最多在"龙&quo ...

  6. [蓝桥杯][算法训练VIP]王、后传说(深搜+回溯)

    题目描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办 ...

  7. [蓝桥杯][算法训练VIP]乘积最大(动态规划)

    题目描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  8. [蓝桥杯][算法训练VIP]麦森数(Java大数+快速幂)

    题目描述 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...

  9. [蓝桥杯][算法训练VIP]黑白无常(dfs)

    题目描述 某寝室的同学们在学术完之后准备玩一个游戏: 游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话"我看到x张白色纸条和y张黑色的纸条",又已知每个 ...

最新文章

  1. Java中throw re_详解Java编程中throw和throws子句的使用方法
  2. Python 中 Iterator和Iterable的区别
  3. java中常量有初始化值吗,java的变量和常量
  4. EL中的param和params
  5. vuex的命名空间有哪些_Vue 3 带来的 Vuex 的替代方案
  6. 内存对齐分配策略(含位域模式)
  7. 修改蓝牙耳机按键映射_喜欢玩游戏的不要错过了,五款高性能游戏蓝牙耳机推荐...
  8. LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  9. raspberry pi_如何购买Raspberry Pi
  10. 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序
  11. 189. Rotate Array
  12. 数据库闪退_解决APP连续闪退的方案
  13. Spring Boot不指定包路径就可以扫描启动类所在包及其子包下的类是怎么做到的?
  14. 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
  15. 推荐几个好用的 html5 游戏源码下载网站
  16. 2019年创新中国网课答案
  17. 谈论机器学习中,哪种学习算法更好有意义吗?
  18. 谷哥学术2022年2月资源分享下载列表 08/20
  19. 部分经济学术语英文简写
  20. 小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

热门文章

  1. java 监听本地端口_JAVA本地监听与远程端口扫描
  2. ip设置 kali 重置_和我一起配置黑客系统kali,带你成为大牛,你真的准备好了吗?...
  3. 槽函数会被执行多次的问题原因及解决方法
  4. VC++编程实现多显示器控制(复制、横屏、纵屏,显示器个数)
  5. Android开发之自定义菊花进度条对话框
  6. Android通过广播实现强制下线功能
  7. 上海建桥学院计算机专业,上海建桥学院全国排名 特色专业多与计算机有关
  8. iOS7 企业应用无法安装应用程序 因为证书无效的解决方案
  9. tableview,基本属性图片详细解释
  10. xlim用法matlab,MATLAB之xlim 、 ylim 、zlim的简单介绍