#include
int main(void)
{
int m,n,i,j,t;
int k;
int J[1050];
int F[1050];
double sum;
while(scanf("%d%d",&m,&n)!=EOF&&m!=-1&&n!=-1)
{
memset(J,0,sizeof(J));
memset(F,0,sizeof(F));
for(i=0;i
scanf("%d%d",&J[i],&F[i]);
}
for(i=0;i
for(j=i+1;j
if((J[i]/(double)F[i])<(J[j]/(double)F[j]))
{
t=J[i];
J[i]=J[j];
J[j]=t;
t=F[i];
F[i]=F[j];
F[j]=t;
}
}
}
sum=0.0;
i=0;
k=m;
while(i
if(k>=F[i]) // 带个等号
{
sum+=(double)J[i];
k=k-F[i];
}
else
{ sum+=k*(J[i]/(double)F[i]);
break;
}
i++;
}
printf("%.3lf\n",sum);
}
}
用贪心法做排序是对了不过排的数组不对,应该用那个比值作为排序判断,然后分别对两个数组进行排序否则你一开始求出f来放到数组里,后面又要把它乘进去,会