链接:
https://www.nowcoder.com/acm/contest/112/B
来源:牛客网
来源:牛客网
题目描述
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
第一行n 第二行n个数,表示每个队伍的人数
输出描述:
输出最少车数
示例1
输入
3 3 4 5
输出
3
备注:
n≤1e5 每个数小于等于5
#include<bits/stdc++.h>
using namespace std;
const int MAX = 1e5+10;
int main()
{
int n;
int s[6];
int cnt = 0;
memset(s,0,sizeof(s));
cin >> n;
for(int i = 0; i < n; i++){
int t;
cin >> t;
s[t]++;
}
cnt += s[5];
while(s[4]){
cnt++;
s[4]--;
s[1]--;
if (s[1] < 0)
s[1] = 0;
}
while(s[3] && s[2]){
cnt++;
s[3]--;
s[2]--;
}
while(s[3]){
cnt++;
s[3]--;
s[1] -= 2;
if (s[1] < 0)
s[1] = 0;
}
while(s[2]){
cnt++;
if (s[2] == 1){
s[2]--;
s[1] -= 3;
if (s[1] < 0)
s[1] = 0;
}
else{
s[2] -= 2;
s[1]--;
if (s[1] < 0)
s[1] = 0;
}
}
cnt += (s[1]+4)/5;
cout << cnt << endl;
return 0;
}
车队分配算法
849

被折叠的 条评论
为什么被折叠?



