贪心之购买大米

现在假设公司下拨了一定数量的经费要去市场采购大米(散装)。如果市场有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>
#include <stdlib.h>
struct mem
{
    double p, h, a;
} s[1010], t;
int main()
{
    int c, n, m, i, j;
    scanf("%d", &c);
    while(c--)
    {
        scanf("%d%d", &n, &m);
        for(i = 0; i < m; i++)
        {
            scanf("%lf%lf", &s[i].p, &s[i].h);
            s[i].a = s[i].p * s[i].h;
        }
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < m-1-i; j++)
            {
                if(s[j].p > s[j+1].p)
                {
                    t = s[j+1];
                    s[j+1] = s[j];
                    s[j] = t;
                }
            }
        }
        double sum = 0;

            i = 0;
            while(i < m && n >= s[i].a)
            {
                n -= s[i].a;
                sum += s[i].h;
                i++;
            }
            sum += n / s[i].p;

        printf("%.2lf\n", sum);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值