题面

题目链接

P1016 旅行家的预算

题目描述

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

输入输出格式

输入格式

第一行,$ D_1,C,D_2,P,N $ 。

接下来有 $ N $ 行。

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

输出格式

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

输入输出样例

输入样例

275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2

输出样例

26.95

说明

$ N \leq 6 $ , 其他数字 $ \leq 500 $

【时空限制】

1000ms,128MB

思路

这道题还真有点麻烦。不过数据规模很小,乱搞搞应该是都能AC的。那我来介绍一种贪心的方法。

首先不妨记起点为第0个加油站,终点为第N+1个加油站且加油价格为0,那么我们可以以如下方式贪心

1.从当前点向后寻找加满油可到的,且油价比当前点小的点。如果当前点不加油可以到达,那么就走过去;否则需要多少油就加多少油(因为走过这个加油站就可以用当前加油站油价更低的油了,多加无用)

2.如果找不到(1)中所述的加油站,那么向后寻找加满油可到的,且油价尽量低的点。然后加满油过去(如果不加满而选择到下一个点加油,那就浪费了)

3.如果没有点可走,那就No Solution

除此之外,如果到终点还有油,那么显然是浪费了。所以我们应该在上一个加油的地方少加一点油,这可以等效为把油带回去卖掉。故每次加油要记录上次加油的位置

AC代码

#include<bits/stdc++.h>
using namespace std; int n;
double L,V,D;
double d[8],w[8];
double ans; int main()
{
cin>>L>>V>>D>>w[0]>>n;
for(int i=1;i<=n;i++) cin>>d[i]>>w[i];
d[n+1]=L,w[n+1]=0; int np=0,last=0;
double nv=0;
while(1)
{
int v;
bool f=false;
for(v=np+1;v<=n+1;v++)
if(w[v]<w[np] && V>=(d[v]-d[np])/D)
{
if(nv>=(d[v]-d[np])/D) nv-=(d[v]-d[np])/D,np=v;
else ans+=((d[v]-d[np])/D-nv)*w[np],np=v,nv=0,last=np;
f=true;break;
}
if(!f)
{ double mi=1000000;
int p=-1;
for(v=np+1;v<=n+1;v++)
if(w[v]<mi && V>=(d[v]-d[np])/D) mi=w[v],p=v;
if(p==-1) {cout<<"No Solution";return 0;}
else ans+=(V-nv)*w[np],nv=V-(d[p]-d[np])/D,np=p,last=np;
}
if(np==n+1) break;
}
ans-=nv*w[last];
printf("%.2f",ans);
return 0;
}

总结

1.遇到数据小的题要有多种思路

2.要自己动手模拟

洛谷 P1016 旅行家的预算 模拟+贪心的更多相关文章

  1. 洛谷 P1016 旅行家的预算

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

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

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

  3. 洛谷P1016 旅行家的预算

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

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

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

  5. 洛谷 P1016 旅行者的预算

    传送门 感觉自己连点生活常识都没有,竟然连油用过之后要减去都不知道,这种贪心模拟题都做不出来--思路在代码里,我菜死了 思路&&代码 //看题解过的..一点都没有成就感 #includ ...

  6. 洛谷P5019 铺设道路 题解 模拟/贪心基础题

    题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...

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

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

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

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

  9. 洛谷 P2503 [HAOI2006]均分数据 随机化贪心

    洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...

随机推荐

  1. Ubuntu18上安装Go和GoLand

    第一步骤:安装Go 方式一: 使用 sudo apt-get install golang命令安装 ubuntu软件库里当前golang版本为1.10,(golang最新版为1.11),可满足要求. ...

  2. [转]深入WPF--Style

    Style 用来在类型的不同实例之间共享属性.资源和事件处理程序,您可以将 Style 看作是将一组属性值应用到多个元素的捷径. 这是MSDN上对Style的描述,翻译的还算中规中矩.Style(样式 ...

  3. 如何查看PostgreSQL正在执行的SQL

    SELECT     procpid,     start,     now() - start AS lap,     current_query FROM     (SELECT          ...

  4. Android根据联系人姓名首字符顺序读取通讯录

      Android根据联系人姓名首字符顺序读取通讯录 版权声明:本文为Zhang Phil原创文章,欢迎转载!转载请注明出处:http://blog.csdn.net/zhangphil 本文给出了A ...

  5. Hibernate继承注解

    hibernate应用中,继承的用途或目的主要有两点: 组件化:故明思义,把重复性的代码抽取成组件,以便重用和维护.hibernate应用中,一些重复的字段,重复的映射配置,就需要抽取成组件. 多态性 ...

  6. MyBatis配置文件(七)--environments运行环境

    一.environments配置信息: environments的作用是用来配置数据库信息,可以配置多个,其有两个可配的子元素,分别是:事务管理器transactionManager和数据源dataS ...

  7. tp5 报 A non well formed numeric value encountered 的错解决办法

    thinkphp5出现A non well formed numeric value encountered的解决办法修改formatDateTime方法如下 默认值: if (is_null($th ...

  8. linux系统之间互传文件

    参考网址:http://blog.csdn.net/shaoxiaohu1/article/details/23191637 1.文件复制:本机->远程服务器: scp /home/shaoxi ...

  9. Java问题解读系列之基础相关---抽象类和接口

    今天来说一波自己对Java中抽象类和接口的理解,含参考内容: 一.抽象类 1.定义: public abstract class 类名{} Java语言中所有的对象都是用类来进行描述,但是并不是所有的 ...

  10. django中的聚合索引

    Django(元信息)元类建索引 ORM查询(sql优化)优化 自定义聚合函数 Django的元类建索引————索引:索引的一个主要目的就是加快检索表中数据,索引是经过某种算法优化过的,因而查找次数要 ...