贪心——洛谷P1016 旅行家的预算
来源:互联网 发布:java波斯王子武者之心 编辑:程序博客网 时间:2024/06/05 00:48
https://www.luogu.org/problem/show?pid=1016
1、先判断下一个目的地,再计算油费和加的油
2、如果当前已经在最后一个加油站并且加满油仍然走不到终点则输出No Solution
3、每次在可以走到的范围内找油费最小的加油站
2.1如果该加油站的油费当前所在地点的油费要便宜,就加恰好能开到该加油站的油
2.2否则判断能否开到终点,如果能则加恰好能开到终点的油,否则加满油
4、进行第2步的同时,寻找可以走到的最远的加油站,如果最远的加油站就是当前所在地点且当前不在终点的话输出No Solution
5、如果最远可以走到的最远的加油站是终点,就输出答案。
这个是洛谷题里的;
写的很好,仔细想想,就会先这个思路是有漏洞的;
再仔细想想这个题解其实是对的;
唯一不足的是题解作者代码,太烂了;
#include <iostream>#include <string>#include <cstdio>#include <cstring>#include<algorithm>#define Ll long long using namespace std;struct you{double x,y;}a[152];int n,now,mi;double c,v,m,x,ans;bool cmp(you a,you b){return a.x<b.x;}int main(){ scanf("%lf%lf%lf%lf%d",&v,&c,&m,&a[0].y,&n); for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y); sort(a+1,a+n+1,cmp); a[n+1].x=v;a[n+1].y=1e8; while(1){ v=1e9; for(int i=now+1;i<=n+1;i++) if(a[i].x<=a[now].x+c*m) if(a[i].y<=v){ mi=i; v=a[i].y; }else;else break; if(v==1e9){printf("No Solution");return 0;} if(v<=a[now].y){ double need=(a[mi].x-a[now].x)/m; if(x>need)x-=need,need=0;else need-=x,x=0; ans+=need*a[now].y; now=mi; }else if(a[n+1].x<=a[now].x+c*m){ double need=(a[n+1].x-a[now].x)/m; if(x>need)x-=need,need=0;else need-=x,x=0; ans+=need*a[now].y; break; }else{ ans+=(c-x)*a[now].y; x=c-((a[mi].x-a[now].x)/m); now=mi; } } printf("%.2lf",ans);}
1 0
- 贪心——洛谷P1016 旅行家的预算
- 洛谷 P1016 旅行家的预算
- 洛谷 P1016 [NOIP1999 T2] 旅行家的预算
- 贪心-旅行家的预算
- 洛谷 1016 [NOIP1999] 旅行家的预算 贪心
- noip1999 旅行家的预算 (贪心)
- 旅行家的预算(贪心)
- 旅行家的预算
- 旅行家的预算
- 旅行家的预算
- 旅行家的预算
- 旅行家的预算
- 旅行家的预算
- 旅行家的预算
- 蓝桥杯 旅行家的预算 By Assassin [复杂的贪心]
- hznu 1628: 旅行家的预算(贪心,分类)
- <基础训练>旅行家的预算(贪心算法)
- codevs 1046 旅行家的预算(贪心)
- 【TensorFlow 代码笔记】 加载预先训练网络进行图像识别(label_image)
- 数据结构与算法分析——字谜问题实现
- Python中单例设计模式
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- OBS源码阅读
- 贪心——洛谷P1016 旅行家的预算
- 【目标检测】Faster RCNN算法详解
- 音乐播放
- easyui的formatter属性的用法
- 数据类型小笔记
- BPS 表单内容传输至自定义内表
- 并发之一
- spring boot 异常处理
- iOS开发中的一些小问题