原题描述
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;
}
}