悼念512汶川大地震遇难同胞——老人是真饿了

对于幸存的灾民来说,最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?
Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。
SampleInput
1
7 2
3 3
4 4
SampleOutput
2.33
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<algorithm>
 4 using namespace std;
 5 struct mi
 6 {
 7        int dan;
 8        int liang;
 9 }s[1005];
10 
11 int cmp(mi a,mi b)
12 {
13     return a.dan<b.dan;
14 }
15 
16 int main()
17 {
18     int c,n,m,i,p,h;
19     double x;
20     scanf("%d",&c);
21     while(c--)
22     {
23         scanf("%d%d",&n,&m);
24         for(i=0;i<m;i++)
25         {
26             scanf("%d%d",&s[i].dan,&s[i].liang);
27         }
28         sort(s,s+m,cmp);
29         int sum=0;         //sum为所花的钱数,n为总钱数,x为购买的数量
30         x=0.0;
31         for(i=0;i<m;i++)
32         {
33             if(sum+s[i].dan*s[i].liang>n)  { x+=(double)(n-sum)/s[i].dan;  break;}       //强制类型转化(double)
34            else 
35            {
36               sum+=s[i].dan*s[i].liang;
37               x+=(double)s[i].liang;   //强制类型转换 是非常有必要的,否则会损失精度 
38            }
39         }
40         printf("%.2lf\n",x);
41     }
42     return 0;
43 }
View Code

 

posted @ 2015-11-05 11:18  Wei_java  阅读(384)  评论(0编辑  收藏  举报