cpp题目描述��� ����Tai zong 和朋友们分好组去郊游他们只想乘出租车。每一组分别有 ��si 个人1=��=41=si=4。一辆出租车最多能坐 44 个人。�������Tai z ong 觉得要是每一组人都分开坐出租车开销太大了因此他们决定拼车可以让几个组的人一起乘一辆车但不能把一组里的人分开那么请问至少要叫多少辆出租车输入格式第一行包含一个整数 �n表示有多少组人。第二行包含
这是一个经典的贪心算法问题。我们需要尽量让每辆出租车坐满人,同时保证每一组的人不能分开坐。
我们可以先将每一组的人数进行统计,然后按照从多到少的顺序排序。然后我们从人数最多的组开始,尽量放入一辆出租车中,直到坐满为止。然后再考虑下一组人。
具体实现如下:
- 读取输入的组数n和每组的人数s[i]。
- 统计每组的人数并排序。
- 初始化需要的出租车数量count为0。
- 从人数最多的组开始遍历,将当前组的人数尽量放入一辆出租车中。
- 如果当前组的人数小于等于4,说明剩余的出租车坐不下这组人,count加1。
- 输出count的值。
代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> s(n);
for (int i = 0; i < n; i++) {
cin >> s[i];
}
sort(s.begin(), s.end(), greater<int>());
int count = 0;
for (int i = 0; i < n; i++) {
if (s[i] <= 4) {
count++;
} else {
int num = s[i] / 4;
count += num;
if (s[i] % 4 != 0) {
count++;
}
}
}
cout << count << endl;
return 0;
}
输入样例解释: 有5组人,每组人数分别为4,3,2,1,2。
输出样例解释: 可以将第一组4个人和第二组3个人放入一辆出租车中,第三组2个人放入一辆出租车中,第四组1个人和第五组2个人分别放入两辆出租车中,所以至少需要3辆出租车
原文地址: https://www.cveoy.top/t/topic/iN4H 著作权归作者所有。请勿转载和采集!