HDU 1009 FatMouse' Trade

来源:互联网 发布:遥知不是雪,为有暗香来 编辑:程序博客网 时间:2024/05/22 13:14

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1009

思路:

如果老鼠想要换到最多的绿豆,便可以换猫房间里面最便宜的绿豆,
也就是说先换取单位数量的绿豆所需要最少的猫粮的房间里的绿豆,这样就可以保证换到的绿豆是最多的。

struct food{int m;//老鼠将得到的int c;//要给猫的double z;}a[1000];int cmp(const void *a,const void *b){return  (( struct food *)a)->z > (( struct food *)b)->z ? 1 : -1 ;// return  (*( struct food *)a).z > (*( struct food *)b).z ? 1 : -1 ; 两种均可}int main(){int i,j,M,N;double s;while( scanf("%d%d",&M,&N) && !( M==-1 || N==-1 ) ) {s=0;for(i=0;i<N;i++){scanf( "%d%d" , & a[i].m , & a[i].c );a[i].z = 1.0 * a[i].c / a[i].m ;}qsort(a,N,sizeof(a[0]),cmp);for(j=0;j<N;j++){if( M >= a[j].c ){s += a[j].m ;M -= a[j].c ;}else{s += ( 1.0 * M * a[j].m ) / a[j].c ;//若不够则取散break;}}printf("%.3lf\n",s);}return 0;}


0 0
原创粉丝点击