P1301 需要安排几位师傅加工零件?

描述

某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出“ NO ”。

输入描述

第一行有两个整数,用空格隔开;第一个整数代表要加工的总零件个数 m(m<=10^6) ,第二个整数代表工厂的零件加工师傅的数量 n(n<=100) 。
第二行有 n 个整数,分别代表每个师傅每天能够加工出来的零件数量(每个师傅每天加工的零件数量<=104)。

输出描述

工厂在 1 天时间内加工所有零件需要的师傅数量或者输出 NO 。

用例输入 1 

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";
	}


}

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注