題目描述
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離d1d1
d1、汽車油箱的容量c
cc(以公升為單位)、每公升汽油能行駛的距離d2d2
d2、出發點每公升汽油**p
pp和沿途油站數n
nn(n
nn可以為零),油站i
ii離出發點的距離d
id_i
di、每公升汽油**p
ip_i
pi(i=1
,2,…
,n
i=1,2,…,n
i=1,2,
…,n)。計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出no solution
。
輸入格式
第一行,d1d1
d1,c
cc,d2d2
d2,p
pp,nnn。
接下來有n
nn行。
第 i +1
i+1i+
1 行,兩個數字,油站i
ii離出發點的距離d
id_i
di和每公升汽油**p
ip_i
pi。
輸出格式
所需最小費用,計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出no solution
。
輸入輸出樣例
輸入 #1
輸出 #1275.6
11.9
27.4
2.82
102.0
2.9220.0
2.2
26.95
說明/提示
n ≤6
n \le 6
n≤6,
,, 其餘數字 ≤
500\le 500
≤500
。我一開始做的時候,這麼水的模擬+貪心題怎麼是綠題。
就開始了。
首先,如果在這個點能夠到達的點中沒有比這個點的p
pp更小的了,就找乙個最小的開過去。
可是還有乙個誤區,就是這樣:
d i+
1=di
+1,p
i+
1
d_=d_i+1,p_\lt p_
di+1=
di+
1,pi
+1di+
2=di
+2,p
i+
2
+1
d_=d_i+2,p_\lt p_
di+2=
di+
2,pi
+2+1di+
3=di
+3,p
i+
3
+2
d_=d_i+3,p_\lt p_
di+3=
di+
3,pi
+3+2
這些都是點 i
ii 能夠到達的點。
比較一下以下兩種方案:
直接從 i
ii 到 i+3
i+3i+
3從 i
ii 到 i+1
i+1i+
1 ,從 i+1
i+1i+
1 到 i+2
i+2i+
2 ,從 i+2
i+2i+
2 到 i+3
i+3i+
3應該是方案 2
22 更好。
所以,只要在這個點所能到達的點中直接跳到離這個點最近的並且 p
x
p_x\lt p_i
px 的點上就可以了。
別急著抄**,這還不是正解。#include
#define maxn 10000
using
namespace std;
double l,c,d,p[maxn]
,w[maxn]
;int n;
intmain()
} w[
++n]
=l; p[n]
=0x3fffffff
;double ans=0;
int now=0;
while
(now!=n)
if(k==now)
更小的px了
k=now+1;
for(
int j=now+
2;j<=n&&w[j]
-w[now]
<=x;j++)if
(p[j]
<=p[k])}
ans+
=(w[k]
-w[now]
)/d*p[now]
; now=k;
}printf
("%0.2lf"
,ans)
;return0;
}
因為,還有一種情況,如果你要去的下乙個點的 p
pp 比當前點的 p
pp 小,那就應該加滿油,到下乙個點的時候稍加一點油,就會更划算。
#include
#define maxn 8
using
namespace std;
double l,c,d,p[maxn]
,w[maxn]
;double y[maxn]
;int n;
intmain()
} w[
++n]
=l; p[n]
=0x3fffffff
;double ans=
0,youliang=0;
int now=0;
while
(now!=n)}if
(k==now)
ans+
=(c-youliang)
*p[now]
; youliang=c-youliang-
(w[k]
-w[now]
)/d;
} now=k;
}printf
("%0.2lf"
,ans)
;return0;
}
洛谷 P1016 旅行家的預算
原題鏈結 這是一道比較簡單的貪心題目。這個題的解法如下 如果把起點定為第0個加油站,終點定為第n 1個加油站。從第0個點開始,驅車至能到達的最遠的那個加油站,在第0個點把油加滿。這其中會遇到三種情況 1.中間有乙個比出發點油價更便宜的加油站。2.中間的油價都比出發點高。3.不能到達下乙個加油站。很容...
洛谷P1016 旅行家的預算 貪心
這道題就是貪心 1 在第乙個加油站的時候,如果在加滿油能夠到達的加油站中有乙個加油站的錢比自己的少 其實等於也行 那就 加足夠到那個車站的油,直接去那個車站 2 這些車站中所有都比自己大,那就找乙個其中錢最少的車站 在當前車站加滿油,然後直接開到那個車站 3 然後到達車站時就不斷重複以上的處理方法 ...
P1016 旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1d1 汽車油箱的容量cc 以公升為單位 每公升汽油能行駛的距離d2d2 出發點每公升汽油 pp和沿途油站數nn nn可以為零 油站ii離出發點的距離didi 每公升汽油 pipi i 1,2,ni...