NOIP1999 旅行家的預算

2021-07-14 06:38:52 字數 1821 閱讀 7578

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

第1行:乙個資料,表示最少費用

copy(如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)

275.6 11.9 27.4 2.8 2

1 102.0 2.9

2 220.0 2.2

26.95

【解】

1,因為要到達目的地且油箱容量和每公升油可行路程一定,所以當路途中的兩個加油站間路程大於油箱最大可行路程時,無解。(no solution)

2,在已經行駛過的加油站中,選擇**最優者(且剩餘可加油量不為0)盡量加滿(同一**可加油量最多為油箱容量),並維護當前**的剩餘可加油量。(優先佇列維護)

3,在當前**最優的剩餘可加油量不足以支援其到達下乙個加油站點時,先加滿當前**的剩餘可加油量(並應去掉此**的可選方案),再選擇剩下**中的最優,直到油箱中的油足夠支援其走到下一加油站點。

4,到達新的加油站點時,因為其**可能影響後面路程油價的方案選擇,所以應將其生成一種新的可選方案以備選用,並維護其油價及其可加油量(初始時為油箱容量)

第乙份(20160701)

#include//優先佇列:加油站油價低為最優

#include#include#includeusing namespace std;

struct node

}gas[110];

bool cmp(node a,node b)

sort(gas,gas+n+1,cmp);

gas[0].jrn=0.0;gas[0].all=c;//初始化

gas[n+1].unit=0x3f3f3f3f;gas[n+1].jrn=d1;

n++;//終點路程需加入

q.push(gas[0]);//起點看作乙個加油站先行放入

node last;

double now,al;//now:從上乙個加油站點為走到當前站點的所需油量,al:已加油需要花費的**

for(i=1,al=0.0;i<=n;i++,al=0.0)

while(!q.empty())

else if(last.all==now)

else

}ans+=al;

q.push(gas[i]);

}printf("%.2lf\n",ans);

}

第二份(20200116)
#include#include#include#include#includeusing namespace std;

const int maxn = 500 + 5;

int n;

double d1, c, d2, p0, d, ans, vlm;

pairg[maxn];

int main()

if(g[p].first > g[i].first + d)

if(g[p].second >= g[i].second)

else

}printf("%.2lf\n", ans);

return 0;

}

NOIP1999 旅行家的預算

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

NOIP 1999 旅行家的預算

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

NOIP1999 旅行家的預算

1046 旅行家的預算 1999年noip全國聯賽普及組noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油...