题目:http://acm.hdu.edu.cn/showproblem.php?pid=1009
贪心类水题。
直接按交换单价排序就可以。
下面是AC代码:
#include<iostream>
using namespace std;
typedef struct
{
double j,f;
double k;
}cat;
cat a[10002];
int cmp(const void *a,const void *b)
{
return (*(cat*)a).k<(*(cat*)b).k?1:-1;
}
int main()
{
int i;
double m,n;
while(scanf("%lf%lf",&m,&n),n!=-1||m!=-1)
{
for(i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].j,&a[i].f);
a[i].k=(a[i].j*1.0)/a[i].f;
}
qsort(a,n,sizeof(a[0]),cmp);
double sum=0;
i=0;
while(i<n)
{
if(m>=a[i].f)
{
sum+=a[i].j;
m=m-a[i].f;
i++;
}
else
{
sum+=m*1.0*a[i].k;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}