题目
链接
题目描述
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
第一行n
第二行n个数,表示每个队伍的人数
输出描述:
输出最少车数
示例1
输入
3
3 4 5
输出
3
备注:
n≤1e5
每个数小于等于5
分析
贪心:
4个人的只能和1个人的拼车
3个人的先和2个人的拼车,再和1个人的拼车
2个人的先和2个人的拼车,再和1个人的拼车
代码
#include<stdio.h>
int cnt[10] = { 0 };
int main() {
int n,temp;
scanf("%d", &n);
int ans = 0;
for (int i = 0; i < n; ++i) {
scanf("%d", &temp);
cnt[temp]++;
}
ans = cnt[5];
ans += cnt[4];
cnt[1] = cnt[1] >= cnt[4] ? cnt[1] - cnt[4]:0;
ans += cnt[3];
if (cnt[2] <= cnt[3]) {
cnt[3] -= cnt[2];
cnt[1] = cnt[1] >= 2*cnt[3] ? cnt[1] - 2*cnt[3] : 0;
cnt[2] = 0;
}
else cnt[2] = cnt[2] - cnt[3];
ans += (cnt[2] / 2);
cnt[1]= cnt[1] >= cnt[2]/2 ? cnt[1] - cnt[2]/2 : 0;
cnt[2] %= 2;
ans =ans+ (cnt[1] + 2 * cnt[2])/5+ (((cnt[1] + 2 * cnt[2])%5)!=0);
printf("%d", ans);
}