题意:
Problem Description
ACdream王国有一条贯穿整个王国的高速公路,一天,你要驾驶着一辆油箱容量为P的车从高速公路的一头驶向另一头,总路程为L千米,每单位体积的汽油可维持行驶W千米,显然路途遥远~总有不够油的情况,所以就要加油~!
再高速公路上总共有N个加油站,但是由于是不同人开的,因此定价也参差不齐。
现在你知道每个加油站的位置,以及每个加油站的单价,问你最少需要多少钱才能到达另一头?
Input
多组数据,每组数据首先是四个整数,P(1<=P<=100),L(1<=L<=30000),W(1<=W<=20),N(1<=N<=500),分别代表油箱容量,路程,每单位体积的路程,加油站数目。
接下来是N行,每行包括一个精确到百分位的实数X(9
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 505;
const int M = 30005;
double mon[N], d[M];
int n, pos[N], p, l, w;
int main() {
while (scanf("%d%d%d%d", &p, &l, &w, &n) == 4) {
for (int i = 0; i < n; i++)
scanf("%lf%d", &mon[i], &pos[i]);
for (int i = 0; i <= l; i++)
d[i] = 0x3f3f3f3f;
int temp = w * p;
for (int i = 0; i < n; i++)
for (int j = 1; j <= temp; j++) {
if (d[pos[i] + j] > mon[i])
d[pos[i] + j] = mon[i];
}
int i;
double res = 0;
for (i = 1; i <= l; i++) {
if (fabs(d[i] - 0x3f3f3f3f) < 1e-9)
break;
res += d[i];
}
if (i == l + 1) {
printf("YES\n%.2lf\n", res / w);
}
else {
printf("NO\n%.2lf\n", (i - 1) * 1.0);
}
}
return 0;
}
时间: 2024-12-14 11:55:03