P1016 旅行家的预算

题目描述

一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

输入输出格式

输入格式:

第一行,D1,C,D2,P,N。

接下来有N行。

第i+1行,两个数字,油站i离出发点的距离Di和每升汽油价格Pi。

输出格式:

所需最小费用,计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

输入输出样例

输入样例#1:

275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
输出样例#1:

26.95

分析:在能到达的加油站中内寻找最便宜的加油站,然后判断是否能一次到达,不能的话先加满,然后一个一个判断直到剩下的油量不足到下一个加油站就加油,不用加满。

  remain是当前剩余的油,cost花费,pos目标站

所有有两种情况:
1.当前站就是pos 再细分两种情况:
   1.从pos就可以走到终点,于是我们把油加到刚好到达终点即可
     cost += ((d[i] - d[pos]) / d2 - remain)*p[pos];就得到了最后答案。
    2.从pos不能一把走到终点于是,从当前位置走,走到哪里加油都不如在pos这里加油划算。所以加满。
2.当前站点是在pos后面的某个站点,也有两种情况
    1.当前剩余的油remain不够走到此站,所以我们把油加来刚好能够走到此站就行了。(因为这里便宜!)
    2.剩余的油remain足够,直接开过去就行了。
 #include<cstdio>
int n;
double d1,d2,c;
double remain=,cost=;
double p[],d[];
int main()
{
scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p[],&n);
for(int i=;i<=n;++i)
{
scanf("%lf%lf",&d[i],&p[i]);
}
d[n+] = d1;
int pos = ;
do{
bool flag = false; //判断能不能到达
for (int i=pos+;i<=n+&&d[i]<=d[pos]+c*d2;i++) //判断加满油能不能到达下一个加油站
{
if(p[i]<p[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
}
pos = i;
flag = true;
break;
}
}
if(!flag)
{
cost += (c-remain)*p[pos]; //不能到达前花费了多少钱
remain = c-(d[pos+]-d[pos])/d2; //还剩多少油
if (remain>=) pos++; //小于0,油根本不够到达下一个站点,大于0,代表可以去下一个加油站
else
{
printf("No Solution");
return ;
}
}
}
while(pos<=n);
printf("%.2lf",cost);
return ;
}

P1016 旅行家的预算的更多相关文章

  1. 洛谷 P1016 旅行家的预算

    P1016 旅行家的预算 题目OJ链接https://www.luogu.org/problemnew/show/P1016 题目描述一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时 ...

  2. P1016 旅行家的预算——贪心

    P1016 旅行家的预算 贪心求,在当前点如果能到达距离最近的油价比他小的就直接去油价比他小的, 如果在可行范围内没有比他油价小的,就加满开到可行范围内油价最小的点: 这么做是对的,我不会证明: 还有 ...

  3. [luogu]P1016 旅行家的预算[贪心]

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

  4. 洛谷 P1016 旅行家的预算 模拟+贪心

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车 ...

  5. luogu P1016 旅行家的预算

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

  6. 洛谷P1016 旅行家的预算

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

  7. [NOIP1999] 提高组 洛谷P1016 旅行家的预算

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

  8. 洛谷P1016 旅行家的预算 题解

    主要就是注意一下各个变量的类型别弄混了 https://www.luogu.org/problem/P1016 #include<cstdio> using namespace std; ...

  9. 题解 P1016 旅行家的预算

    题目传送门(以纪念调了两个半小时的单调队列) emmm这题单调队列可海星... 因为每个点有油量无限的,但是油箱容量是无限的(正好反的一道题 SP348 EXPEDI - Expedition) 所以 ...

随机推荐

  1. JsonResponse、FileResponse和StreamingHttpResponse

    一.JsonResponse对象 class JsonResponse(data,encoder=DjangoJSONEncoder,safe=True,json_dumps_params=None, ...

  2. LeetCodeOJ刷题之15-16【3Sum(三数和问题)】

    本文为两个题:[三数和(3Sum)]与[最近三数和(3Sum Closest)]问题 第一部分分析3Sum问题,第二部分分析3Sum Closest问题,由于两个问题的思路很像,所以这里放到一起分析. ...

  3. 使用cmd命令进行运行java(cmd命令输出Hello word)

    使用cmd命令输出Hello word 条件,按照好jdk和jre的环境下,如果没有安装,请安装,简单安装教程链接:https://www.cnblogs.com/weibanggang/p/9392 ...

  4. 【洛谷P1100】高低位交换

    高低位交换 题目链接 这道题非常水,我是用位运算做的 a=n>>16 二进制的“高位”b=n-(a<<16) 二进制的“低位”ans=(b<<16)+a 转换 #i ...

  5. c语言描述的二叉树的基本操作(层序遍历,递归,非递归遍历)

    #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define ...

  6. o'Reill的SVG精髓(第二版)学习笔记——第十一章

    第十一章:滤镜 11.1滤镜的工作原理 当SVG阅读器程序处理一个图形对象时,它会将对象呈现在位图输出设备上:在某一时刻,阅读器程序会把对象的描述信息转换为一组对应的像素,然后呈现在输出设备上.例如我 ...

  7. JavaScript js调用堆栈(三)

    本文主要深入介绍JavaScript内存机制 内存模型 JS内存空间分为栈(stack),堆(heap),池(一般也会归类为栈中),其中栈存放变量,堆存放复杂对象,池存放常量. 注:闭包中的变量并不保 ...

  8. webpack4——打包html报错解决

    ①先引入html-webpack-plugin插件,然后在终端下载 npm install --save-dev html-webpack-plugin ②我的文件结构 ③修改webpack.dev. ...

  9. ATK-DataPortal 设计框架(二)

    在信息的交换过程中,总是有此相同相似的功能,由于业务的各自不同,由同一类型来处理诸如增删改查等常见的信息处理方式.从日常的对些类行为操作为生成的类分析,大量雷同的代码遍布整个项目.框架中xxxHand ...

  10. toad安装错误—Failed to Download products and updates

    近日,在公司云电脑上安装Toad for oracle,安装到中途总会出现如下错误,个人认为是Toad安装时需要下载/更新一些组件,公司网络对下载有所限制,导致报错,无法进行后续安装. 图1.Toad ...