问题 D: 买饼干
时间限制: 1 Sec 内存限制: 128 MB提交: 74 解决: 27
[ 提交][ 状态][ 讨论版]
题目描述
小明同学决定去鼎盛超市买点零食囤着慢慢吃。现在假设小明带着一定数量的现金要去超市采购饼干(散装)。如果超市有m种饼干,各种饼干的单价和重量已知,请问,为了满足更多饼干的需求(因为各种饼干味道差不多,当然是买的越多越好啊),最多能购买多少重量的饼干呢?
输入
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示现金的金额和饼干的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应饼干的重量。
输出
对于每组测试数据,请输出能够购买饼干的最多重量.(你可以假设现金买不光超市所有的饼干)。
每个实例的输出占一行,保留2位小数。
样例输入
17 23 34 4
样例输出
2.33
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; struct bing { double p; double h; }c[1005]; bool cmp(struct bing _a,struct bing _b) { return _a.p< _b.p; } int main() { int C,i,m; double n; scanf("%d",&C); while(C--) { double sum=0.0; scanf("%lf%d",&n,&m); for(i=0;i<m;i++) scanf("%lf%lf",&c[i].p,&c[i].h); sort(c,c+m,cmp); for(i=0;i<m&&n!=0;i++) { if(c[i].p*c[i].h<=n) { sum=sum+c[i].h; n=n-c[i].p*c[i].h; } else if(c[i].p*c[i].h>n) { sum=sum+n/c[i].p; n=0; } } printf("%.2f\n",sum); } }