2 条题解

  • 4
    @ 2023-7-27 21:27:01

    思路:

    先分析样例,可以发现需要优先购买单价最小的

    购买时遵循两个规则:

    1、如果能全部买入,全部买入

    2、如果买入以后超出需求,买入需要的部分就行

    题解:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    struct milk
    {
        int price,num;//price:单价,num:数量
    };
    milk a[5005];
    
    //因为后面要用sort,所以先写好cmp
    bool cmp(milk a,milk b)
    {
        //优先取最小单价,也就是说要按价格从小到大排列
        return (a.price < b.price);
    }
    
    int main()
    {
        int n,m;
        cin >> n >> m;
        for(int i = 0;i < m;i++)
            cin >> a[i].price >> a[i].num;
        sort(a,a + m,cmp);
        int ans = 0;
        for(int i = 0;i < m;i++)
        {
            //如果每日生产量不可以或者刚好满足需求量,也就是说可以全部买入且不超出需求
            if(a[i].num <= n)
            {
                n -= a[i].num;//买入后降低需求
                ans += a[i].num * a[i].price;//计算当前需要的价格
            }
            else
            {
                ans += a[i].price * n;//计算买入所需部分需要的价格
                break;//因为此时一定是满足了需求的,所以可以直接break了
            }
        }
        cout << ans;
        return 0;
    }
    
    • @ 2023-8-5 17:50:17

      这么酷的题解怎么可以没有赞呢,我先点了(大拇哥儿)

  • -4
    @ 2023-7-27 14:12:42

    解析

    将牛奶按照单价从小到大排序,一个个购买,直到买到m。

    题解

    • 1

    信息

    ID
    346
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    866
    已通过
    355
    上传者