喵喵喵,斜率优化带猫猫早早回家。
传送门
题解
首先定义:
其中要先对A数组从小到大排序再计算前缀和。这样每个饲养员带走的必定为连续的几只猫。
定义$F[i][j]$表示前$i$个饲养员带走了前$j$只猫时的最小等待时间之和。转移方程为:
但是直接这样转移的话复杂度太高,考虑斜率优化。可以把转移方程写成直线的形式:
这样就可以把$F[i-1][k]+S[k]$看作纵坐标,$k$看作横坐标,$A[j]$看成斜率。然后用单调队列维护一个斜率递增的下凸壳就行了。
代码
挺短的QwQ。
1 |
|