【BZOJ 5311】贞鱼

题目链接

题目描述

众所周知,贞鱼是一种高智商水生动物。不过他们到了陆地上智商会减半。
这不?他们遇到了大麻烦!
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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值