題目概述:
這道題是說一輛小車每單位長度露單位油,然後就這麼開呀開呀想要到距離為l的另乙個城鎮去。路上有一些加油站,每個加油站距離目標城鎮的距離給了,能加的油給了,判斷最少需要的加油次數。
演算法思想:
嗯大概是這樣,我們該如何找到最少的加油次數呢。答案是將加油站看成「備胎」,所以當小車每經過乙個加油站,都要將這個加油站能加的油記載到某個容器裡面,然後再在需要的時候把它提出來加油。
嗯好的,問題的關鍵來了,這個容器是什麼。我們要思考,提出來加油的時候提的有什麼特徵,仔細貪心一下,每次提出都應該是提出加油最大的出來,這樣的話才可以盡量少的加油。
當隊列為空並且沒有達到最後目標的話那就說明到達不了也就是錯了。
**部分:
#include #include #include using namespace std;
struct node ;
node ar[10086];
bool cmp(const node &n1, const node &n2)
int main()
sort(ar, ar + n, cmp);
int l, p;
cin >> l >> p;
int cur = p, res = 0;
int fuel_index = n-1;
bool get = true;
while (cur < l)
if (cur >= l)
if (q.empty() && cur < l)
cur += q.top();
q.pop();
res++;
} if (!get) cout << -1 << endl;
else cout << res << endl;
return 0;
}
POJ 2431(優先佇列)
題意 從起點到終點距離為n,走1單位路程消耗1單位油,路上會有m個加油站分別出現在si的位置,路過加油站時可以選擇是否加油。問到達加油站最少需要加幾次油,不能到輸出 1.分析 整體上來看,汽車每經過乙個加油站就擁有了在這個加油站加油的能力,可以將加油站加入優先佇列,沒油時優先選取大的。收穫 路過即獲...
POJ2431 優先佇列 貪心
題目大意 見 挑戰程式設計競賽 p74。我的理解 優先佇列 貪心 注意把輸入的距離 加油站到終點 改為起點到加油站。因為求得是最優解,需要盡可能少的加油站,所以我們每次希望去加油的時候 加最大的那個,因而將加油站push進priority queue 堆結構,預設每次彈出最大值 在到達加油站 i 時...
POJ 2431 貪心 優先佇列
題意 一輛卡車距離重點l,現有油量p,卡車每前行1公尺耗費油量1,途中有一些加油站,問最少在幾個加油站加油可使卡車到達終點或到達不了終點。思路 運用優先佇列,將能走到的加油站的油量加入優先佇列中,油不夠時加入優先佇列中數值最大的油,如果油不夠時佇列裡為空則到達不了。include include i...