码迷,mamicode.com
首页 > 其他好文 > 详细

acdream 1717(贪心)

时间:2015-05-07 00:56:57      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

题意:
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;
}

acdream 1717(贪心)

标签:

原文地址:http://blog.csdn.net/hyczms/article/details/45544019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!