这是一个经典的贪心算法问题。我们需要尽量让每辆出租车坐满人,同时保证每一组的人不能分开坐。

我们可以先将每一组的人数进行统计,然后按照从多到少的顺序排序。然后我们从人数最多的组开始,尽量放入一辆出租车中,直到坐满为止。然后再考虑下一组人。

具体实现如下:

  1. 读取输入的组数n和每组的人数s[i]。
  2. 统计每组的人数并排序。
  3. 初始化需要的出租车数量count为0。
  4. 从人数最多的组开始遍历,将当前组的人数尽量放入一辆出租车中。
  5. 如果当前组的人数小于等于4,说明剩余的出租车坐不下这组人,count加1。
  6. 输出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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录