Hdoj1009 FatMouse' Trade

来源:互联网 发布:apache安装包下载地址 编辑:程序博客网 时间:2024/06/05 23:29

FatMouse' Trade

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 68928    Accepted Submission(s): 23490


Problem Description
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
 

Input
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
 

Output
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
 

Sample Input
5 37 24 35 220 325 1824 1515 10-1 -1
 

Sample Output
13.33331.500
 解题思路:快速排序,按照兑换比例降序排列。f【i】==0时候要特殊考虑。

#include<stdio.h>#include<stdlib.h>int M,N;// amount of maoliang  amount of rooms typedef struct mouse{double j,f;double bizhi;}mouse;mouse p[1000];int cmp(const void *a,const void *l) //定义指针a,b;a,b可以指向任意类型的值,但它们的指向必须是常量{{return (*(struct mouse *)a).bizhi>(*(struct mouse *)l).bizhi?-1:1; //降序排列}int main(void){while(scanf("%d %d",&M,&N)!=EOF){if(M==-1&&N==-1)break;int i=0;while(i<N){scanf("%lf %lf",&p[i].j,&p[i].f);p[i].bizhi=(double)p[i].j/p[i].f;//越gao越好 i++;}qsort(p,N,sizeof(p[0]),cmp);double sum=0;double current_ml=0;//当前已经用掉的猫粮 for(i=0;i<N;i++){if((current_ml+p[i].f)<=M){current_ml+=p[i].f;if(p[i].f==0)sum+=p[i].j;elsesum+=(p[i].bizhi*p[i].f);}else{if(p[i].f==0)sum+=p[i].j;elsesum+=p[i].bizhi*(M-current_ml);break;}}printf("%.3lf\n",sum);}return 0;}


0 0