题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009

大意:有一部分钱去买猫粮,每个仓库有一定数量的猫粮和所需要的价格。支付百分比的价格将获得百分比的猫粮

思路:贪心算法思想,计算出每个仓库内猫粮的性价比,根据性价比对仓库内元素进行排序

从性价比最高的开始买,直到金钱为0

代码:


#include<bits/stdc++.h>
using namespace std;
int m;int n;
struct mm{
	int a;
	int b;
};
mm f[1010];
bool cmp (mm a,mm b)
{
	return (double)(a.a)/a.b>(double)(b.a)/b.b;
}
int main()
{
	while(~scanf("%d%d",&m,&n))
	{
		if(m==-1&&n==-1)
			break;
		memset(f,0,sizeof f);
		double sum = 0; 
		for(int i = 1;i<=n;i++)
		{
			cin>>f[i].a>>f[i].b;
		}
		sort(f+1,f+n+1,cmp);
	/*	for(int i=1;i<=n;i++)
		{
			cout<<f[i].a<<' '<<f[i].b<<endl;
		}*/
		int i=1;
	//	cout<<m<<'!'<<endl;
		while(m>0)
		{
			if(m>f[i].b)
				sum+=f[i].a,m-=f[i].b;
			else
				sum+=double(f[i].a)*(double)(m)/f[i].b,m=0;
			i++;
		}
		printf("%.3f\n",sum);
	}
}