题目描述
众所周知,贞鱼是一种高智商水生动物。不过他们到了陆地上智商会减半。
这不?他们遇到了大麻烦!
n只贞鱼到陆地上乘车,现在有k辆汽车可以租用。
由于贞鱼们并不能在陆地上自由行走,一辆车只能载一段连续的贞鱼。
贞鱼们互相有着深深的怨念,每一对贞鱼之间有怨气值。
第i只贞鱼与第j只贞鱼的怨气值记为Yij,且Yij=Yji,Yii=0。
每辆车载重不限,但是每一对在同辆车中的贞鱼都会产生怨气值。
当然,超级贞鱼zzp长者希望怨气值的总和最小。
不过他智商已经减半,想不出分配方案。
他现在找到了你,请你帮助他分配贞鱼们,并输出最小怨气值之和ans。
Sol
由于只能选择一段连续的鱼为一组,我们很容易用二维前缀和得出一个区间内怒气值的和,于是有一个简单的dp。
设 f [ i ] [ j ] f[i][j] f[i][j] 表示到了 i i i ,已经选了 j j j 组的最优答案,直接做复杂度为 O ( n 2 k ) O(n^2k) O(n2k)
考虑优化,我们要做的是一个前缀取 m i n min min 的操作,但是每次的贡献随着 i i i的移动而发生变化,不好用数据结构维护
不过我们很容易发现决策具有单调性,即如果 j > k j>k j>k 且 j j j的转移在 i i i 处已经优于了 k k k,那么 k k k就没有用了,后面的转移 j j j 总比 k k k 优,证明很简单,因为当前 [ j , i ] [j,i] [j,i]区间包含的怒气肯定是 [ k , i ] [k,i] [k,i]的一个子集,而此时 j j j 的转移已经优于 k k k 了,说明了无论是本身的 dp 值还是而外可能增加的怒气值 j j j 都会优于 k k