描述

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\n",res);
  
  
  
  
}