乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市(假設出發時油箱是空的)。給定兩個城市之間的距離d1、汽車油箱的容量c(以公升為單位)、每公升汽油能行駛的距離d2、出發點每公升汽油**p和沿途油站數n(0<=n<=100),油站i離出發點的距離di、每公升汽油**pi(i=1,2,……n)。計算結果四捨五入至小數點後兩位。如果無法到達目的地,則輸出「no solution」。
第1行:5個空格分開的資料,分別表示d1 c d2 p n 第2..n+1行:每行3個空格分開的資料,分別表示油站號i, 該油站距出發點的距離di,該油站每公升汽油的**pi
第1行:乙個資料,表示最少費用
copy
(如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)
275.6 11.9 27.4 2.8 21 102.0 2.9
2 220.0 2.2
26.95分析:
按di從小到大排序,for迴圈依次壓如優先佇列,如果把佇列裡比當前的加油站貴的換成當前加油站的油;
p.s:加油時不加ans,用油時在加相應**。
#include #include #include #include using namespace std;
struct node;
node(double x,double y,double z)
bool operator<(const node &x)const
};struct node2;
node2(double x,double y)
}station[110];
bool cmp(node2 x,node2 y)
while(!q.empty())
q1.push(q.top());
fuel-=q.top().c;
q.pop();
} while(!q.empty())
while(!q1.empty())
q.push(node(i,station[i].c,c-fuel));
fuel=c;
double s=station[i+1].b;
while(!q.empty())
else if(t.c==0)
s-=e.c*d2;
fuel-=e.c;
ans+=e.c*t.b;
} }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 汽車油...