1 条题解

  • 0
    @ 2026-3-3 14:22:08

    这是一道经典的贪心算法题目,核心思路是优先买单价最低的牛奶来最小化总花费:

    1. 将所有奶农按牛奶单价从小到大排序。
    2. 依次遍历每个奶农,尽可能多地购买他的牛奶(直到买够需求量或买完他的产量)。
    3. 每买一次就累加对应的费用,最终得到最小总花费。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    struct F {
        int p, a;
    } f[5005];
    
    int main() {
        int n, m, ans = 0, rem;
        cin >> n >> m;
        rem = n;
        for (int i = 0; i < m; ++i)
            cin >> f[i].p >> f[i].a;
        
        // 冒泡排序按单价从小到大
        for (int i = 0; i < m - 1; ++i) {
            for (int j = 0; j < m - 1 - i; ++j) {
                if (f[j].p > f[j + 1].p) {
                    F t = f[j];
                    f[j] = f[j + 1];
                    f[j + 1] = t;
                }
            }
        }
        
        for (int i = 0; i < m && rem > 0; ++i) {
            int buy = (rem < f[i].a) ? rem : f[i].a;
            ans += buy * f[i].p;
            rem -= buy;
        }
        
        cout << ans << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    208
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    13
    已通过
    7
    上传者