问题:1326. 需要安排几位师傅加工零件
类型:贪心
题目描述:
某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。
现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出NO。
输入:
第一行有两个整数,用空格隔开;
第一个整数代表要加工的总零件个数 m (m≤10^6),第二个整数代表工厂的零件加工师傅的数量 n(n≤100)。
第二行有 n 个整数,分别代表每个师傅每天能够加工出来的零件数量(每个师傅每天加工的零件数量≤10^4)。
输出:
输出工厂在 1 天时间内加工所有零件需要的师傅数量,或者输出NO。
样例:
输入:
10 5
1 3 2 4 2
输出:
4
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a1,int a2){
if(a1>a2){
return true;
}else{
return false;
}
}
int main(){
//一、分析问题
//已知:总零件个数m,加工师傅的数量n,每个师傅每天能够加工出来的零件数量;
//未知:该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出NO。
//关系:贪心。
//二、数据定义
int m,n,a[110],s=0;
//三、数据输入
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
//四、数据计算
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
s+=a[i];
if(s>=m){
cout<<i+1;
break;
}
}
//五、输出结果
if(s<m){
cout<<"NO";
}
return 0;
}