题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1009
#include<bits/stdc++.h>
using namespace std;
struct trade
{
int beans, catfood;
double rate;
}f[1001];
bool cmp(trade a, trade b)
{
return a.rate > b.rate;
//(结构体排序cmp)return 结构体1.待排序变量>或<结构体2.待排序变量
}
int main()
{
int n, m;
while (scanf("%d%d", &m, &n))
{
if (n == -1 || m == -1)
break;
for (int i = 0; i < n; i++)
{
scanf("%d%d", &f[i].beans, &f[i].catfood);
f[i].rate = 1.0*f[i].beans / f[i].catfood;//性价比高低 (数据类型)
}
sort(f, f + n, cmp);//通过cmp判断一个元素是否小于另一个元素
double sum = 0;
for (int i = 0; i < n; i++)
{
if (m > f[i].catfood)
{
sum+=f[i].beans;
m-=f[i].catfood;
}
else
{
//猫粮不足
sum += f[i].rate * m;
m = 0;
break;//表示结束
}
}
printf("%.3lf\n", sum);
}
return 0;
}