top1编程
← 返回题目
题解

【入门】需要安排几位师傅加工零件?

1 条题解

  • 0
    @ 2026-7-31 15:00:09

    解题思路

    有 m 个零件要在一天内加工完,n 个师傅每天产量不同。要问最少派几个师傅够,或者所有人都不够就输出 NO。

    思路:产量高的师傅优先。

    1. 把所有师傅按每天产量从高到低排序
    2. 从产量最高的开始,逐个累加产量
    3. 累加到某个师傅时,总产量达到或超过 m,就输出派的人数
    4. 如果所有师傅加起来都不够 m,输出 NO

    为什么要产量高的优先? 想用最少的人完成任务,当然要先派产量最高的师傅,这样才能用最少的人达到需要的产量。

    举例:10 个零件,5 个师傅产量 1 3 2 4 2

    • 排序:4 3 2 2 1
    • 累加:4、4+3=7、7+2=9、9+2=11 ≥ 10
    • 派 4 个师傅够用

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int a[110];
        int m, n;
        cin >> m >> n;
    
        for (int i = 1; i <= n; i++) cin >> a[i];
    
        // 按产量从高到低排序
        for (int i = 1; i < n; i++) {
            for (int j = 1; j <= n - i; j++) {
                if (a[j] < a[j + 1]) {
                    int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
                }
            }
        }
    
        int s = 0;
        for (int i = 1; i <= n; i++) {
            s += a[i];
            if (s >= m) {
                cout << i;  // 派 i 个够用
                return 0;
            }
        }
    
        cout << "NO";  // 都不够
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),排序
    • 空间复杂度:O(N),存产量数组
    • 1