买大米(最优解)

来源:互联网 发布:温州国际淘宝城 编辑:程序博客网 时间:2024/04/29 06:11

悼念512汶川大地震遇难同胞

Time Limit: 1000MS Memory limit: 65536K

题目描述

对于幸存的灾民来说,最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?
 

输入

 输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0

输出

 对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。

示例输入

17 23 34 4

示例输出

2.33

 

#include<stdio.h>   struct stud   {       int p;       int h;   }body[26],z;   int main()   {       float sum;       int C;       scanf("%d",&C);       while(C>0)       {           int m,n,i,j;           scanf("%d %d",&m,&n);           for(i=0;i<n;i++)           {               scanf("%d %d",&body[i].p,&body[i].h);           }       for(i=0;i<n-1;i++)       for(j=i+1;j<n;j++)       if(body[i].p>body[j].p)       {           z=body[i];           body[i]=body[j];           body[j]=z;       }       sum=0;       for(i=0;i<n;i++)       {           if(m>0)           {               if(m>=body[i].p*body[i].h)               {                   sum=sum+body[i].h;                   m=m-body[i].p*body[i].h;               }               else              {                   sum=sum+(m*1.0)/body[i].p;                   break;               }           }           else              break;       }       printf("%.2lf\n",sum);           C--;       }   }