算法:模拟

复杂度:

解题思路:

从前往后依次考虑队列中的每个同学,每个同学会去当前结束时间最早的水龙头处接水。

由于本题数据范围较小,因此可以直接循环一遍所有水龙头,求出当前结束时间最早的水龙头编号。那么我们就将当前同学安排在这个水龙头的位置上,然后将该水龙头的结束时间加上当前同学的接水时间。

最后,所有水龙头结束时间的最大值就是答案。

C++ 代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int N = 10010,
    M = 110;
 
int n, m;
int w[N];
int q[M];
 
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%d", &w[i]);
 
    for (int i = 0; i < n; i++)
    {
        int t = 0;
        for (int j = 0; j < m; j++)
            if (q[j] < q[t])
                t = j;
 
        q[t] += w[i];
    }
 
    int res = 0;
    for (int i = 0; i < m; i++) res = max(res, q[i]);
 
    cout << res << endl;
 
    return 0;
}


另外,牛客暑期NOIP真题班限时免费报名
报名链接:https://www.nowcoder.com/courses/cover/live/248
报名优惠券:DCYxdCJ