本题要注意贪心的标准比较,要将除法改成乘法,注意细节,妙啊
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int m,n,i,j,a[1000][2];
while(scanf("%d%d",&m,&n),m!=-1&&n!=-1)
{
for(i=0;i<n;i++)
scanf("%d%d",&a[i][0],&a[i][1]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((a[i][0]*a[j][1])<(a[j][0]*a[i][1]))
{
swap(a[i][0],a[j][0]);
swap(a[i][1],a[j][1]);
}
}
}
double sum=0;
for(i=0;i<n;i++)
{
if(m>a[i][1])
{
m-=a[i][1];
sum+=a[i][0];
}else
{
sum+=(1.0*m/a[i][1])*a[i][0];
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}