描述
A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his
favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires
F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get
W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell
him the maximum amount of peanut he can obtain.
输入
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 W[i] and F[i] respectively. The test case is terminated by two -1. All integers are not greater than 1000.
输出
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain.
样例输入
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
样例输出
13.333 31.500
快排+贪心。 注意结构体的comp()函数就行。
#include <stdio.h> #include <stdlib.h> typedef struct { double w; //peanut double f; //cat food } waho; int comp ( const void *a, const void *b ) { return ((*( waho * )a).w / (*(waho *)a).f ) > ((*( waho * )b).w/ (*(waho *)b).f ) ? -1:1 ; } int main() { void mxpea(waho wh[],int n,double m); double m; //the cat food which the mouse has int n; //the number of the rooms int i,j; while(1) { scanf("%lf%d",&m,&n); if(m==-1&&n==-1) break; waho * wh = (waho *)malloc(n*sizeof(waho)); for (i=0;i<n;i++) scanf("%lf%lf",&wh[i].w,&wh[i].f); mxpea(wh,n,m); } return 0; } void mxpea(waho wh[],int n,double m) //贪心选择 w/f最大者 { qsort(wh,n,sizeof(waho),comp); int i; double res=0; double tem; for (i=0;i<n;i++) { if (m>wh[i].f) { res+=wh[i].w; m-=wh[i].f; } else { tem=m/wh[i].f; res+=wh[i].w*tem; break; } } printf("%.3lf ",res); }