您的位置:首页 > 其它

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

2015-11-22 21:21 351 查看

原题描述

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: