復健運動poj2431

2022-08-26 00:45:31 字數 1136 閱讀 8164

題目大意:

一頭牛從起點到終點,最開始有p公升油,每走一公里漏一公升油,路途上有許多加油點,油箱容量為無窮大,求能到終點的最小加油次數。

《挑戰程式設計競賽》建議首先處理輸入資料,使之成為到起點的距離。

優先佇列練習

用優先佇列儲存路過的加油點的油。每次取用最大值,這樣會使加油次數儘量減少。每取出一次就ans++.

值得注意的是:需要增加距離起點為l的點,保證最後乙個加油點到終點能成功走到,因為有可能存在最後的油量走不到終點的情況,所以這個是必須要加的。【wa無數次在這裡。

1 #include 2 #include 3 #include 4

using

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 時...