貪心 旅行家的預算

2022-01-15 11:10:23 字數 1715 閱讀 4647

問題描述

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

輸入格式

第一行為4個實數d1、c、d2、p與乙個非負整數n;

接下來n行,每行兩個實數di、pi。

輸出格式

如果可以到達目的地,輸出乙個實數(四捨五入至小數點後兩位),表示最小費用;否則輸出「no solution」(不含引號)。

樣例輸入

275.6 11.9 27.4 2.8 2

102.0 2.9

220.0 2.2

樣例輸出

26.95

思路來自:

思路:

1.無解情況:可直接在輸入時就進行判斷,如果加滿油即 max = capacity*driveofeve 都小於 a[i].begintodistance - a[i-1].begintodistance ,那就不可能到達,直接輸出 no solution ,return0。

2.有解:尋找他能所到達範圍之內(加滿油: a[j].begintodistance - a[i].begintodistance > max )的那個最便宜的加油站

(1).如果能到達就加夠剛好到那個便宜加油站的油

(2).如果沒有找到,就加滿油到達當前加油站的下乙個加油站。

**:

1 #include2 #include3 #include4

5using

namespace

std;67

struct

node8;

1213

intmain()

1433}34

35int

j;36

double res = 0;37

double surplus = 0; //

到第i個加油站的剩餘油量

38for(int i = 0; i <= n; i=j)

3947

if(a[j].priceofeve 4851}52

53if(a[j].priceofeve <= a[i].priceofeve) //

如果找到

5458

else

5963}64

65 printf("

%.2lf\n

",res);

66 system("

pause");

67return0;

68 }

題解 旅行家的預算(貪心)

八中oj 洛谷 這題太複雜了,能否全a看資料。很好的一道模擬貪心題 演算法原理 優先順序 如下 1.列舉途中經過的加油站,每經過乙個加油站,計算一次花費 2.在乙個加油站所需要加的油,就是能夠支援它到達下乙個油價比它低的加油站的量 3.如果在這個加油站即使加滿油,都不能到達乙個比它油價低的加油站,1...

旅行家的預算

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

旅行家的預算

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