旅行家的預算

2021-08-15 20:39:40 字數 1440 閱讀 4644

乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離d1、汽車油箱的容量c(以公升為單位)、每公升汽油能行駛的距離d2、出發點每公升汽油**p和沿途油站數n(n可以為零),油站i離出發點的距離di、每公升汽油**pi(i=1,2,…,n)。計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出「no solution」。

輸入格式:

第一行,d1,c,d2,p,n。

接下來有n行。

第i+1行,兩個數字,油站i離出發點的距離di和每公升汽油**pi。

輸出格式:

所需最小費用,計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出「no solution」。

輸入樣例#1:

275.6 11.9 27.4 2.8 2

102.0 2.9

220.0 2.2

輸出樣例#1:

26.95

n\le 6n≤

6 ,其餘數字\le 500≤5

00簡單理一下貪心的思想

先確定每個節點間的距離,start為0節點,end為n+1節點。

若存在節點間的距離d[i]-d[i-1]大於d*c,則no solution;其餘情況,必有解。

在每個節點,我們有三種選擇:

1.如果指定的goal還未完成,繼續行駛;

2.若到達了goal,則向前找第乙個郵價比自己低的油站(end處油站油價為0)

i.能夠開往(distance<=d*c),則將goal定為它;

ii不夠開往(distance>d*c),將油加滿,將goal定為在加滿情況下所能開到的最遠油站。

#include

#include

#include

#include

#include

#include

using

namespace

std;

double d[600]=,p[600];

double s,c,d,p1;

int n;

double money=0,oil=0;

double

locin

(int goal,int now)

if(now1]-d[now])/d;

locin(goal,now+1);

return

0; }

if(now==goal)

locin(k,now);

return

0; }

else

}}int

main

() }

d[n+1]=s;p[n+1]=0;

if(d[n+1]-d[n]>d*c)

locin(0,0);

return

0;}

旅行家的預算

問題描述 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入...

旅行家的預算

乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n,油站i離出發點的距離d i 每公升汽油 p i 計算結果四捨五入至小數點後兩位。如果無法到達目的地...

旅行家的預算

又是抄的題解。自己做的時候一定要多想想可能的情況,因為考試只有一次機會。注釋寫在 裡了。include include include include define inf 9999999 using namespace std const int n 50005 int n double d1,c...