算法:模拟
复杂度:
解题思路:
从前往后依次考虑队列中的每个同学,每个同学会去当前结束时间最早的水龙头处接水。
由于本题数据范围较小,因此可以直接循环一遍所有水龙头,求出当前结束时间最早的水龙头编号。那么我们就将当前同学安排在这个水龙头的位置上,然后将该水龙头的结束时间加上当前同学的接水时间。
最后,所有水龙头结束时间的最大值就是答案。
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;
} 
京公网安备 11010502036488号