题解
【入门】需要安排几位师傅加工零件?
1 条题解
-
0
解题思路
有 m 个零件要在一天内加工完,n 个师傅每天产量不同。要问最少派几个师傅够,或者所有人都不够就输出 NO。
思路:产量高的师傅优先。
- 把所有师傅按每天产量从高到低排序
- 从产量最高的开始,逐个累加产量
- 累加到某个师傅时,总产量达到或超过 m,就输出派的人数
- 如果所有师傅加起来都不够 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