博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2431
阅读量:6721 次
发布时间:2019-06-25

本文共 802 字,大约阅读时间需要 2 分钟。

大意:

  有n个加油点,给出每个加油点距离终点的位置和能加多少油,最后一行给出总长度和最初的油量。求最少加几次油能到终点,不能到的话输出-1.

Sample Input

44 45 211 515 1025 10

Sample Output

2

分析:

  一开始打算用dfs搜索,用dis[i]代表到i点时能加的油量,dfs(i,p,l),i代表当前位置,p代表当前油量,l代表总长,当i+p>=l时,这种情况符合条件,得每种能成立情况的加油次数再取最小值就好,但超时.

  于是想到用优先队列,能以目前的油量跑得越远,加油次数越少。所以优先队列里存放油量,用pre代表之前的位置,用rest代表当前油量,dis代表走多远,每走过一个点rest-=dis,把这个点的油量存入优先队列中,当rest<dis时从队列中取元素。没元素可取就意味着不能到终点。

代码:

  

#include
#include
#include
#include
#include
using namespace std; struct point { int x,y; }s[10010]; bool cmp(point a,point b) { return a.x
>n; int i; for(i=0;i
>s[i].x>>s[i].y; int l,p; cin>>l>>p; for(i=0;i
q; int rest=p; int pre=0; int ans=0; for(i=0;i

  

  

转载于:https://www.cnblogs.com/137033036-wjl/p/4676500.html

你可能感兴趣的文章
数据库事务控制注解说明
查看>>
Tomcat相关知识
查看>>
环境变量,env, set
查看>>
SPOJ DIVCNT2
查看>>
Source Insight 3.X utf8支持插件震撼发布
查看>>
网络爬虫之HTTPClient
查看>>
【Highcharts】 绘制饼图和漏斗图
查看>>
list操作 foreach和for的区别
查看>>
Mem, MyString
查看>>
分页存储过程
查看>>
头条的用户内容推荐
查看>>
mongo 手册阅读笔记
查看>>
Domino管理员29个问题
查看>>
9号团队-团队任务4:每日立会(2018-11-29)
查看>>
超高性能的json序列化之MVC中使用Json.Net
查看>>
几款前端性能检测工具
查看>>
(实用)CentOS 6.3更新内置Python2.6
查看>>
对啊英语音标---三、长元音的发音字母组合怎样记
查看>>
新东方雅思词汇---7.4、cap
查看>>
英语每日写作---1、但是,人们在吹口哨时做得更好
查看>>