題目描述 description
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離d1、汽車油箱的容量c(以公升為單位)、每公升汽油能行駛的距離d2、出發點每公升汽油**p和沿途油站數n(n可以為零),油站i離出發點的距離di、每公升汽油**pi(i=1,2,……n)。計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出「no solution」。
輸入描述 input description
第一行d1 c d2 p n
之後n行,每行2個數表示離出發點的距離di和每公升汽油的**pi
輸出描述 output description
最消費用,保留2位小數
樣例輸入 sample input
275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
樣例輸出 sample output
26.95
資料範圍及提示 data size & hint
n<=100
理解:1、如果 當前站點的位置+油箱容量*每公升油能行駛的距離《下乙個站點的位置,那麼無法到達目的地
2、如果 當前站點油的**比下乙個站點油的**高,那麼先用完油箱裡剩餘的油,再加油加到恰好可以跑到下乙個站點,油箱裡不儲油
設到達當前站點時,油箱裡有剩餘的油,若沒有剩餘則視為0,不影響
a、郵箱裡剩餘的油的單價比當前站點的油的單價高,不用剩餘的油,用當前站點的油。耗費只加上實際需要的油的**,同時儲存若加滿可以省下多少油。
b、油箱裡剩餘的油的單價比當前站點的油的單價低,先用完剩餘的油,再用當前站點的油。耗費加上剩餘的油的**再加上當前站點實際需要的油的**,同時儲存若加可以剩下多少油。
幾個問題:
1、為什麼情況2不儲存油?因為下乙個站點的油的**更便宜。
2、為什麼情況2考慮剩餘的油的**直接用?為什麼不考慮有無剩餘的油?
假設有3個站點 a,b,c。b為當前站點。
若油價為a>b>c,那麼在上乙個站點不儲存油。若油價為ac,那麼先用剩餘的油花費更少。油如果沒有,就是0,計算的時候不影響
帶注釋**
無注釋:
#include #include#include
using
namespace
std;
double
d1,c,d2;
intn;
double d[100015],p[100015
];void dfs(int now,double price,double l_o,double
l_o_p)
double max_go=c*d2;
if(d[now]+max_go1
])
if(p[now]>p[now+1
]) dfs(now+1,l_o*l_o_p+((d[now+1]-d[now])/d2-l_o)*p[now],0,0
);
else
}}int
main()
codevs 1046 旅行家的預算
include include include include include include include using namespace std double rest 0,xuyao,p 10 s,c,t,d 10 daan 0 int k 0,j 0,xiao1 0,xiao2 0,bac...
旅行家的預算
問題描述 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入...
旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n,油站i離出發點的距離d i 每公升汽油 p i 計算結果四捨五入至小數點後兩位。如果無法到達目的地...