这道贪心题目类型跟上次不同,不是活动安排,题目大意是:有m个猫粮,n个房间,下面n组数据,每组两个,分别代表的是:把猫粮放到房间里能得到多少价值,第二个数是一个房间放的猫粮!
#include <iostream>
#include <cstdio>#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
using namespace std;
const int maxn=1005;
int m,n;
struct node
{
int x;
int y;
double r;
}p[maxn];
int cmp(node a,node b)
{
return a.r>b.r;//根据这个比率来,越小相差越小
}
int main()
{
while(scanf("%d%d",&m,&n),(n+m)!=-2)
{
for(int i=0; i<n; i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
p[i].r=(p[i].x*1.0)/p[i].y;
}
sort(p,p+n,cmp);
double sum=0;
for(int i=0; i<n&&m>0; i++)
{
if(m>=p[i].y)
{
sum+=p[i].x;
m-=p[i].y;
}
else
{
sum+=m*p[i].r;
m=0;
}
}
printf("%.3lf\n",sum);
}
return 0;
}