典型贪心算法的运用。
#include<stdio.h>
#include<algorithm>
#define For(i,m,n) for(i=m;i<n;i++)
using namespace std;
typedef struct room
{
double j,f;
}room;
room r[1005];
//double rio[1005];
bool cmp(const room &a,const room &b)
{
return (a.j/a.f)>(b.j/b.f);
}
int main()
{
int n,i;
double count,m;
while(scanf("%lf%d",&m,&n)&&m!=-1&&n!=-1)
{
count=0;
For(i,0,n)
{
scanf("%lf%lf",&r[i].j,&r[i].f);
}
sort(r,r+n,cmp);i=0;
while(m>0&&i<n)//i<n是应该要注意的点,可能它是一只特别“有钱”的猫
{
if(m>r[i].f)
{
m=m-r[i].f;
count+=r[i].j;
i++;
}
else
{
count+=m*(r[i].j/r[i].f);
m=m-r[i].f;
}
}
printf("%.3lf\n",count);
}
return 0;
}