贪心E 为地震后的灾民采购大米

来源:互联网 发布:mac删除系统文件 编辑:程序博客网 时间:2024/04/30 23:09

现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?

Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0 < n <= 1000, 0 < m <= 1000 ),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1 <= p <= 25,1 <= h <= 100),分别表示单价和对应大米的重量。
Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。
Example Input
1
7 2
3 3
4 4
Example Output
2.33

#include <stdio.h>struct f{    double p;    double h;}a[1010],c;int main(){    int N,n,m,i,j;    scanf("%d",&N);    while(N--)    {          double sum=0;        scanf("%d %d",&n,&m);        for(i=0;i<m;i++)        {            scanf("%lf %lf",&a[i].p,&a[i].h);        }        for(i=0;i<m-1;i++)        {            for(j=0;j<m-i-1;j++)            {                if(a[j].p>a[j+1].p)   //按照单价来升序排序                {                    c=a[j];                    a[j]=a[j+1];                    a[j+1]=c;    //两个变量p,h作为一个整体一起交换                }            }        }        for(i=0;i<m;i++)        {            if(a[i].p*a[i].h<=n)            {                sum+=a[i].h;                n-=a[i].p*a[i].h;            }            else            {                sum+=n/a[i].p;                break;            }        }        printf("%.2f\n",sum);    }    return 0;}
原创粉丝点击