P1301 需要安排几位师傅加工零件?
描述
某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出“ NO ”。
输入描述
第一行有两个整数,用空格隔开;第一个整数代表要加工的总零件个数 m(m<=10^6) ,第二个整数代表工厂的零件加工师傅的数量 n(n<=100) 。
第二行有 n 个整数,分别代表每个师傅每天能够加工出来的零件数量(每个师傅每天加工的零件数量<=104)。
输出描述
工厂在 1 天时间内加工所有零件需要的师傅数量或者输出 NO 。
10 5 1 3 2 4 2
用例输出 1
4
思路:由于题目要求的是最少需要多少师傅来加工零件,因此我们优先挑选加工能力强的师傅来加工零件。
#include<bits/stdc++.h>
using namespace std;
int a[110], sum, n, m;
bool cmp(int a, int b) {
if (a > b) {
return true;
} else {
return false;
}
}
int main() {
cin >> m >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i]; //记录了每个师傅的操作能力
}
// 贪心策略:
// 尽量的让加工能力强的师傅,先去加工
// 从大到小排序
sort(a + 1, a + n + 1, cmp);
//目标 师傅的产能 做对比
for (int i = 1; i <= n; i++) {
sum = sum + a[i];
if (sum >= m) {
cout << i;
break;
}
}
if (sum < m) {
cout << "NO";
}
}