悼念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 }