poj2431 Expedition 題解報告

2022-04-28 20:27:08 字數 1289 閱讀 2947

題目傳送門

【題目大意】

卡車要去往距離起點為$l$的城鎮,出發時有$p$公升汽油,每經過一單位距離消耗一公升汽油,從起點到城鎮的路上有$n$個加油站,油箱可以容納無窮多的油,求最少要在多少個加油站加油才能順利到達城鎮。

【思路分析】

用乙個單調佇列儲存加油站資訊,按照汽油從大到小排序,每經過乙個加油站就把它加入佇列,如果當前油箱裡的汽油不夠到下乙個加油站了,那就取出隊頭,更新各項資訊,相當於在那個加油站加了油,細節見**。

【**實現】

1 #include2 #include3 #include4 #include5 #include6 #include7

#define g() getchar()

8#define rg register

9#define go(i,a,b) for(rg int i=a;i<=b;i++)

10#define back(i,a,b) for(rg int i=a;i>=b;i--)

11#define db double

12#define ll long long

13#define il inline

14#define pf printf

15using

namespace

std;

16int

fr()

23while(ch>='

0'&&ch<='

9') w=(w<<1)+(w<<3)+ch-'

0',ch=g();

24return w*q;25}

26const

int n=10002;27

intn,l,p;

28 priority_queueq;

29struct

stopa[n];

32 il bool

cmp(stop x,stop y)

35int

main()//

如果隊列為空則不可能到達

51 ans++;

52 now+=q.top();q.pop();//

加油53

}54 now-=d;q.push(a[i].sum);pos=a[i].dis;55}

56 pf("

%d\n

",ans);

57return0;

58 }

**戳這裡

POJ 2431(優先佇列)

題意 從起點到終點距離為n,走1單位路程消耗1單位油,路上會有m個加油站分別出現在si的位置,路過加油站時可以選擇是否加油。問到達加油站最少需要加幾次油,不能到輸出 1.分析 整體上來看,汽車每經過乙個加油站就擁有了在這個加油站加油的能力,可以將加油站加入優先佇列,沒油時優先選取大的。收穫 路過即獲...

復健運動poj2431

題目大意 一頭牛從起點到終點,最開始有p公升油,每走一公里漏一公升油,路途上有許多加油點,油箱容量為無窮大,求能到終點的最小加油次數。挑戰程式設計競賽 建議首先處理輸入資料,使之成為到起點的距離。優先佇列練習 用優先佇列儲存路過的加油點的油。每次取用最大值,這樣會使加油次數儘量減少。每取出一次就an...

POJ2431 探險 解題報告

問題描述 一群奶牛搶了一輛卡車決定前往樹林裡探險。但是由於他們的駕駛技術太糟,油箱在路上弄破了,所以他們每前進乙個單位的路程就會漏掉乙個單位的油。為了修好油箱,奶牛們必須前往最近的城市 不會超過1000000單位路程 在當前位置和城市之間有n個加油站,奶牛可以在加油站加1到100單位的油。對於人來說...