[恢]hdu 1009
2011-12-16 14:17:21
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1009
题意:老鼠拿了m克猫食换豆子。n个屋子,每个屋子有豆子j,猫食f。可以只换一部分。问最多能得到多少豆子。
mark:简单贪心。
代码:
# include <stdio.h>
# include <stdlib.h>
typedef struct node{
int j, f ;
}node ;
node a[1010] ;
int cmp(const void *pp, const void *qq)
{
node *p = (node*)pp, *q = (node*)qq ;
return q->j * p->f - p->j * q->f ;
}
int main ()
{
int j, f, n, m, i ;
double sum ;
while (~scanf ("%d%d", &m, &n))
{
if (n == -1&&m==-1) break ;
for (i = 0 ; i < n ; i++)
{
scanf ("%d%d", &a[i].j, &a[i].f) ;
j += a[i].j ;
f += a[i].f ;
}
if (m >= f)
{
printf("%.3lf", (double)j) ;
continue ;
}
qsort(a, n, sizeof(node), cmp) ;
sum = 0 ;
for (i = 0 ; i < n ;i++)
{
if (m < a[i].f){
sum += 1.0*m/a[i].f * a[i].j ;
break ;
}
sum += a[i].j ;
m-=a[i].f ;
}
printf ("%.3lf\n", sum) ;
}
return 0 ;
}