Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0 < n <= 1000, 0 < m <= 1000 ),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1 <= p <= 25,1 <= h <= 100),分别表示单价和对应大米的重量。
Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。
Example Input
1
7 2
3 3
4 4
Example Output
2.33
Hint
题解:求的是最大重量,所以贪心方案是先挑便宜的买。
#include<bits/stdc++.h>
using namespace std;
struct rice
{
int p;
int w;
}r[10000], t;
int main()
{
int c, n, m;
int i, j;
double w;
cin>>c;
while(c--)
{
cin>>n>>m;
for(i = 0; i < m; i++)
{
cin>>r[i].p>>r[i].w;
}
for(i = 0; i < m; i++)
{
for(j = 0; j < m - i -1; j++)
{
if(r[j].p > r[j+1].p)
{
t = r[j];
r[j] = r[j+1];
r[j+1] = t;
}
}
}
i = w = 0;
while(n)
{
if(n > r[i].p * r[i].w)
{
n = n - r[i].p * r[i].w;
w += r[i].w;
i++;
}
else
{
w += n * 1.0 / r[i].p;
n = 0;
}
}
printf("%.2lf\n", w);
}
return 0;
}