//简单的贪心,注意边界情况
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
using namespace std;
struct node
{
double w;
double v;
double k;
};
int cmp(node c,node d)
{
return c.k>d.k;
}
int main()
{
int i,j,n;
double m;
node a[10005];
double sum;
while((scanf("%lf%d",&m,&n)==2)&&((n!=-1)||(m!=-1)))
{
sum=0;
for (i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].w,&a[i].v);
a[i].k=a[i].w*1.0/a[i].v;
}
sort(a,a+n,cmp);
j=0;
while(1)
{
if (j==n)
break;
if (m>=a[j].v)
{
sum=sum+a[j].w;
m=m-a[j].v;
j++;
}
else
{
sum=sum+a[j].w*1.0/a[j].v*m;
break;
}
}
printf("%.3f\n",sum);
}
return 0;
}
hdu1009
最新推荐文章于 2022-11-19 08:50:17 发布