HDOJ_2178真饿了
2017-05-29 00:16
169 查看
真饿了
问题描述:受灾人员最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?
输入:
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
输出:
[align=left][/align]
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。
样例输入:
1
7 2
3 3
4 4
样例输出:
2.33
简单粗心,代码如下:
#include<stdio.h> struct dm { double je; //金额 double zl; //质量 }a[1010],t; int main() { int i,j,k,T; double m,n; scanf("%d",&T); while(T--) { double sumzl=0; //sumzl计算总重量 double sumje=0; //sumzl计算总金额 scanf("%lf%lf",&m,&n); for(i=0;i<n;i++) scanf("%lf%lf",&a[i].je,&a[i].zl); if(m==0) { printf("0\n"); break; } for(i=0;i<n-1;i++) //把单位金额少的数组放前面 for(j=0;j<n-i-1;j++) if(a[j].je>a[j+1].je) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for(i=0;i<n;i++){ if(sumje<m) { sumje+=a[i].je*a[i].zl; sumzl+=a[i].zl; } if(sumje==m) break; //当总金额等于m的时候要退出循环,否则(sumje-m)=0在后面会被作为余数处理 if(sumje>m) { sumzl-=(sumje-m)/a[i].je; break; } } printf("%.2lf\n",sumzl); } return 0; }
相关文章推荐
- HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)
- HDOJ2178 猜数字
- HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)
- HDOJ2178
- hdoj 2178
- hdoj.2178 猜数字【水题】 2015/03/27
- hdoj 2178 猜数字
- hdoj 2178 猜数字
- HDOJ 2178 猜数字
- Hdoj 2178 猜数字
- HDOJ 题目2178 猜数字(数学)
- HDOJ 2178 猜数字(水题)
- HDU 4474 HDOJ Yet Another Multiple Problem 2012ACM亚洲赛成都赛区K题
- HDOJ 1013
- 【HDOJ 2824】 The Euler function (欧拉筛)
- HDOJ 1236 with three methods using C++
- HDOJ 1020 究极水题
- poj 1011 hdoj 1455 Sticks(搜索+剪枝)
- 【HDOJ】1332 LC-Display
- hdoj 4325 Flowers 【线段树 + 离散化】【区间更新 单点查询】