題目鏈結
一道貪心題,為使油費最小,則我們就必須盡可能的在油價低的地方加油。在不加油的情況下,汽車可行駛的最大距離為c*d2,記為max_d,所以到達乙個車站後加的油可影響的範圍在後面距離當前加油站小於等於max_d的加油站,為使油費最少,我們不能浪費一分錢。
①如果在max_d內有油價低於當前加油站時,我們只需要保持剛好可以行駛到目標加油站即可,然後再加更低價的油繼續前行。
②如果在max_d內無低於次站油價的加油站,我們就需要乙個跳板,讓車子能找到低油價的加油站,我們在當前加油站加滿(因為可到達的加油站的油價都高於當前加油站的油價,所以盡可能使用當前加油站的油),那麼下一站該選擇哪一站呢?我們為保持續航必須在乙個可到達的加油站加上油,但後面的油的**都比較高,為保持費用最低,我們選擇在較高的油價中選擇最低的油價的加油站,然後假設繼續加滿,觀察max_d內有無油價低於此加油站的加油站,如果有,那麼我們就不用加滿了,只需加到恰好到達目標加油站,如果沒有,則繼續加滿,直到遇到油價低於當前達到的加油站或者到達終點。
accode
#include
#include
#include
using
namespace std;
struct node date[
550]
;int
main()
date[n+1]
.d =d1;
date[n +1]
.v =
0x3f3f3f3f
;bool sign =
true
;double max_sign = c * d2;
for(
int i =
1; i <= n; i++)}
double now_c =
0,ans=0;
int now_n =
0, last =0;
while
(now_n !=n+1)
}if(top != now_n)
else
for(
int i = now_n +
1; i <= n && date[i]
.d - date[now_n]
.d <= max_sign;i++)}
double up =
(date[top]
.d - date[now_n]
.d)/ d2;
ans = ans + c * date[now_n]
.v; now_c = c - up;
now_n = top;}}
return0;
}
(貪心)P1016 旅行家的預算
應用 題庫訓練 比賽記錄討論 題目提供者ccf noi 評測方式雲端評測標籤noip提高組1999 難度普及 提高 時空限制1000ms 128mb 提交 題解 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1d1 汽車油箱的容量cc 以公升為...
P1016 旅行家的預算 貪心
p1016 旅行家的預算 貪心求,在當前點如果能到達距離最近的油價比他小的就直接去油價比他小的,如果在可行範圍內沒有比他油價小的,就加滿開到可行範圍內油價最小的點 這麼做是對的,我不會證明 還有就是,如果變數定義在外面了,在for迴圈裡面就不要定義了,這個點卡了我一下午 一直停止執行 include...
P1016 旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1d1 汽車油箱的容量cc 以公升為單位 每公升汽油能行駛的距離d2d2 出發點每公升汽油 pp和沿途油站數nn nn可以為零 油站ii離出發點的距離didi 每公升汽油 pipi i 1,2,ni...