思路:
这是一道经典的区间调度 +++ 贪心问题。因为班车只能沿直线跑一次,且每个小组的行程是区间[Si,Ei][S_i, E_i][Si ,Ei ],我们需要选择尽可能多的奶牛上车,使得在任意时刻,车上奶牛数不超过容量 CCC。
贪心策略:
1.
将所有小组按终点 EiE_iEi 从小到大排序(若终点相同,则按起点从大到小)。
2.
依次处理每个小组,检查当前区间[Si,Ei)[S_i,E_i)[Si ,Ei )内每个站点已有的奶牛数是否都<C< C<C。
若是,则尽可能多地安排该组奶牛上车(即填满容量),并更新区间内的占用数。
若否,则跳过该组(或部分安排,但贪心已保证最优)。
注意:因为允许部分奶牛分开乘坐,所以每组可以只上部分奶牛。但贪心按终点排序后,能放就放满是最优的。
正确性:
按终点排序后,先处理早结束的区间,能最大化后续区间的可用容量,这是经典的区间调度贪心。
代码: