HDU ACM 2187 悼念512汶川大地震遇难同胞——老人是真饿了

来源:互联网 发布:南国英雄传 知乎 编辑:程序博客网 时间:2024/05/21 10:50

原题描述

Problem Description

对于幸存的灾民来说,最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?

Input

输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0

Output

对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。

Sample Input

1
7 2
3 3
4 4

Sample Output

2.33

解题思路

傲娇了,没有写。参考本博客类似的贪心排序题。

参考代码

#include <iostream>#include <algorithm>#include <iomanip>using namespace std;struct rice{    int p;    int h;}r[1001];bool comp(rice r1, rice r2){    return r1.p < r2.p;}int main(){    int c, n, m;    double weight;    double money;    int k;    cin >> c;    while (c--)    {        cin >> n >> m;        weight = 0;        money = (double)n;        k = 0;        for (int i = 0; i < m; i++)        {            cin >> r[i].p >> r[i].h;        }        sort(r, r + m, comp);        while (money > 0.0)        {            if ((double)(r[k].p * r[k].h) >= money)            {                weight += money / (double)r[k].p;                money = 0.0;            }            else            {                weight += (double)r[k].h;                money -= (double)(r[k].p * r[k].h);                k++;            }        }        cout << setprecision(2) << fixed << weight << endl;    }}
0 0