問題描述
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離d1、汽車油箱的容量c(以公升為單位)、每公升汽油能行駛的距離d2、出發點每公升汽油**p和沿途油站數n(n可以為零),油站i離出發點的距離di、每公升汽油**pi(i=1,2,……n)。計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出「no solution」。
解題思路:
貪心規則:
從當前點開始,再c*d2的距離內,找第乙個油價低於當前結點油價的站點
如果找到:
如果當前結點剩餘油量可以抵達,更新下乙個站點的剩餘油量;
如果當前結點剩餘油量不可以抵達,更新當前結點需要新增的油量;
如果找不到:
則在本站加滿油,將相鄰的結點當做下乙個目的結點;-------》條件1
如果超過c*d2,則不可以到達;
需要注意的是:判斷找沒找到時候應當注意用目的結點與當前結點的差值如果單單用乙個flag標誌的話,當遇到最後乙個結點,即目的地,你會直接跳到---》條件1---那個條件中,從而多加了油,使得結果偏大;
#include#includeusing namespace std;
struct node
;int main()
bool goal=true;
double ans=0;
while(start.idlen)
int flag=false;
int k=1;
while(k<=n)
{ if(sta[k].id>start.id&&sta[k].dis-start.dis
旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n,油站i離出發點的距離d i 每公升汽油 p i 計算結果四捨五入至小數點後兩位。如果無法到達目的地...
旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入至小數點後...
旅行家的預算
又是抄的題解。自己做的時候一定要多想想可能的情況,因為考試只有一次機會。注釋寫在 裡了。include include include include define inf 9999999 using namespace std const int n 50005 int n double d1,c...