時間限制:
1.0s
記憶體限制:
256.0mb
試題**
noip1999
提高組問題描述
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離
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
解題思路
貪心在加油站
i加滿油能到達的所有加油站中,如果存在油價比
i低的加油站
j,則在加油站
i把油加到恰好能開到加油站j就行
否則在加油站
j把油加滿開到下乙個加油站
**
// 貪心
// 在加油站i加滿油能到達的所有加油站中,如果存在油價比i低的加油站j,則在加油站i把油加到恰好能開到加油站j就行
// 否則在加油站j把油加滿開到下乙個加油站
#include#include#include#include#includeusing namespace std;
struct station
fin.close();
sort(sta.begin(), sta.end()); // 按距離公升序
double oil = 0, ans = 0; // 當前剩餘油量和加油花費
int pos = 0; // 當前位置
double currentdis = 0, currentpri = p; // 當前加油站的距離和油價
bool has_next = false; // 是否能達到下乙個加油站
while (pos!=n+1)
if (sta.at(j).pri=(sta.at(j).dis-currentdis)/d2) // 油箱裡現存的油已經足夠開到j加油站
else // 現存的油不夠開到j加油站
break;
}} if (!has_next) // 一箱油的車程內沒有油價更便宜的加油站
else
}} if (pos!=n+1)
else
return 0;
#endif
#ifdef online_judge
double d1,c,d2,p;
int n,i,j;
cin >> d1 >> c >> d2 >> p >> n;
station tmp;
vectorsta;
tmp.dis = 0;
tmp.pri = p;
sta.push_back(tmp);
tmp.dis = d1;
tmp.pri = 0;
sta.push_back(tmp); // 把起點和終點也當做加油站加入序列中
for (i=0; i> tmp.dis >> tmp.pri;
sta.push_back(tmp);
} sort(sta.begin(), sta.end()); // 按距離公升序
double oil = 0, ans = 0; // 當前剩餘油量和加油花費
int pos = 0; // 當前位置
double currentdis = 0, currentpri = p; // 當前加油站的距離和油價
bool has_next = false; // 是否能達到下乙個加油站
while (pos!=n+1)
if (sta.at(j).pri=(sta.at(j).dis-currentdis)/d2) // 油箱裡現存的油已經足夠開到j加油站
else // 現存的油不夠開到j加油站
break;
}} if (!has_next) // 一箱油的車程內沒有油價更便宜的加油站
else
}} if (pos!=n+1)
else
return 0;
#endif
}
旅行家的預算
問題描述 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入...
旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n,油站i離出發點的距離d i 每公升汽油 p i 計算結果四捨五入至小數點後兩位。如果無法到達目的地...
旅行家的預算
乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入至小數點後...