題目大意:
一頭牛從起點到終點,最開始有p公升油,每走一公里漏一公升油,路途上有許多加油點,油箱容量為無窮大,求能到終點的最小加油次數。
《挑戰程式設計競賽》建議首先處理輸入資料,使之成為到起點的距離。
優先佇列練習
用優先佇列儲存路過的加油點的油。每次取用最大值,這樣會使加油次數儘量減少。每取出一次就ans++.
值得注意的是:需要增加距離起點為l的點,保證最後乙個加油點到終點能成功走到,因為有可能存在最後的油量走不到終點的情況,所以這個是必須要加的。【wa無數次在這裡。
1 #include 2 #include 3 #include 4using
namespace
std;
5int
n, tank, l, p, ans;
6struct
nodea[10010];9
bool
cmp(node a, node b)
12int
main()
19 scanf("
%d %d
", &l, &p);
20for(int i = 1; i <= n; i++)a[i].l = l -a[i].l;
21 n++;
22 a[n].l = l;a[n].r = 0
;23 sort(a+1,a+1+n, cmp);
24int pos = 0
;25 tank =p;
26 priority_queue q;
27for(int i = 1; i <= n; i++)
35 tank +=q.top();
36 q.pop();ans++;37}
38if(ans == -1)break
;39 tank -=d;
40 pos =a[i].l;
41q.push(a[i].r);42}
43 printf("
%d\n
", ans);44}
45 }
POJ 2431(優先佇列)
題意 從起點到終點距離為n,走1單位路程消耗1單位油,路上會有m個加油站分別出現在si的位置,路過加油站時可以選擇是否加油。問到達加油站最少需要加幾次油,不能到輸出 1.分析 整體上來看,汽車每經過乙個加油站就擁有了在這個加油站加油的能力,可以將加油站加入優先佇列,沒油時優先選取大的。收穫 路過即獲...
POJ2431 探險 解題報告
問題描述 一群奶牛搶了一輛卡車決定前往樹林裡探險。但是由於他們的駕駛技術太糟,油箱在路上弄破了,所以他們每前進乙個單位的路程就會漏掉乙個單位的油。為了修好油箱,奶牛們必須前往最近的城市 不會超過1000000單位路程 在當前位置和城市之間有n個加油站,奶牛可以在加油站加1到100單位的油。對於人來說...
POJ2431 優先佇列 貪心
題目大意 見 挑戰程式設計競賽 p74。我的理解 優先佇列 貪心 注意把輸入的距離 加油站到終點 改為起點到加油站。因為求得是最優解,需要盡可能少的加油站,所以我們每次希望去加油的時候 加最大的那個,因而將加油站push進priority queue 堆結構,預設每次彈出最大值 在到達加油站 i 時...