题目链接:https://vijos.org/problems/P1253

描述

一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离d1、汽车油箱的容量c(以升为单位)、每升汽油能行驶的距离d2、出发点每升汽油价格p和沿途油站数n,油站i离出发点的距离d、每升汽油价格p。
计算结果四舍五入至小数点后两位。
如果无法到达目的地,则输出-1。

格式

输入格式

输入共n+1行,第一行为d1,c,d2,p,n,以下n行,每行两个数据,分别表示该油站距出发点的距离d和该油站每升汽油的价格p。两个数据之间用一个空格隔开。

输出格式

一行,输出最少费用。
计算结果四舍五入至小数点后两位。
如果无法到达目的地,则输出-1。

本题练习贪心算法。

分析:走到能走到之内的第一个价格比当前所在点便宜的加油站,如果之后能走到的所有站都比当前点贵 那么就加满油 走到能走到的最便宜的一个站。

如果在这个范围内存在一个加油站j,它的价格pri[j]<pri[i],那么只要把油加到刚好能到达j就可以了;如果在这个范围内不存在这样的加油站,那么就在i加满油,然后走到最便宜的加油站j,如果无法走到j,即最近的加油站dis[j]>dis[i]+c*d2,此时无解。

代码:

#include <stdio.h>
#include <stdlib.h>using namespace std;#define maxn 102double d[maxn];//距离
double c;//容量
double d2;//每升油能行驶的距离
double p[maxn];//汽油价格
int n;//加油站个数double cost;//花费
double rest;//油箱油量剩余int main()
{/*#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endif*/double d1;scanf("%lf %lf %lf %lf %d",&d1,&c,&d2,&p[0],&n);for(int i=1;i<=n;i++){scanf("%lf %lf",&d[i],&p[i]);}d[n+1] = d1;p[n+1] = 0;d[0] = 0;cost = 0;rest = 0;int k = 0;while(k<=n){int j = k;int flag = 0;int min = 0;double need = 0;//在k处需要加多少油while(d[j+1] - d[k] <= c * d2 && j<=n){j++;//最近的比当前加油站低的if(flag == 0 && p[j]<p[k]){flag = j;}//最便宜的站if(min == 0 || p[j]<p[min]){min = j;}}if(k == j){printf("-1\n");return 0;}//没有比当前加油站价格低的,加满,走到最便宜的一个站if(flag == 0){need = c - rest;cost += need * p[k];rest = c - (d[min] - d[k])/d2;k = min;}//最近的比当前加油站低的else{need = (d[flag] - d[k])/d2 - rest;if(need < 0){need = 0;}cost += need * p[k];rest = 0;k = flag;}}printf("%0.2lf\n",cost);return 0;
}

Vijos 1253 旅行家的预算相关推荐

  1. vijos:旅行家的预算[贪心]

    题目 Problem description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶 ...

  2. java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

    洛谷 P1016 旅行家的预算 Java解法 洛谷 P1016 旅行家的预算 Java解法 package com.two; import java.util.Scanner; public clas ...

  3. 贪心算法解旅行家的预算问题

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

  4. noip1999 旅行家的预算 (贪心)

    A1122. 旅行家的预算 时间限制:1.0s   内存限制:256.0MB   总提交次数:854   AC次数:169   平均分:54.45 将本题分享到:        查看未格式化的试题   ...

  5. 蓝桥杯:旅行家的预算 贪心解法

    蓝桥杯:旅行家的预算 贪心解法 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距 ...

  6. 蓝桥杯题目练习(旅行家的预算)

    算法训练VIP 旅行家的预算 原题链接:旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市 到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单 ...

  7. 贪心算法——旅行家的预算(NOIP1999)

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

  8. 旅行家的预算(贪心)

    旅行家的预算 来源: 1999年NOIP全国联赛普及组NOIP全国联赛提高组 题目描述: 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽 ...

  9. #NOIP1999#旅行家的预算

    旅行家的预算 时间限制: 1 Sec  内存限制: 64 MB 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C( ...

最新文章

  1. Delphi开发步骤经验谈(C++亦实用)
  2. 用拦截器+注解+cookie进行简单限流访问案例
  3. .net 调用url接口_.NetCore中Quartz.NET的依赖注入
  4. 怎样才能去掉图片锁定纵横比_1分钟批量统一Word中300张图片的大小!无需插件、代码,超级简单...
  5. (kruskal)Jungle Roads
  6. unity 查找所以物体_用Unity来实现一下绳子效果——Obi Rope插件介绍
  7. html5与其他语言的优势,浅谈:html5和html的区别
  8. 查找指定时间段内的文件
  9. H264--H264解码--5
  10. 5.1 Lilypond五线谱
  11. 工具--nssm详解
  12. html5标题居中怎么设置,标题居中怎么设置
  13. MyBatisPuls入门案例
  14. python创建时间序列_python 时间序列
  15. 信创办公--基于WPS的Word最佳实践系列(汇总目录)
  16. UNIX网络编程:卷2-读书笔记
  17. 爬瓜子二手车(json接口)
  18. pgn model和一些解决oov的方法
  19. FMCW雷达测距技术最强最全解析
  20. 英语背单词有用吗_考研英语刷真题+背单词真的有用吗?83分上岸学姐用经验告诉你...

热门文章

  1. 解读创客空间下的教育新生态
  2. C# 汉字转拼音首字母大写
  3. Linux网络安全防火墙篇
  4. 快手直播弹幕数据采集
  5. gddr6速率_美光发布GDDR6X显存,号称速度世界最快
  6. Linux基础知识之常见基本操作
  7. C# e.Handled的用法,控制文本框键盘输入
  8. 学习前端的实用网站——未完待续
  9. Neural Collaborative Filtering(NCF) 学习笔记
  10. Beckhoff TwinCAT3.1 通过EtherCAT驱动电机(上)