「题解」ARC126D Pure Straight

「题解」ARC126D Pure Straight

状压 dp + 费用提前计算。

考虑假如已经确定好了选出那些数(称作标记点),计算一下代价。

毛估估贪心就是先让它们尽量靠中间聚在一起,然后内部再算算逆序对。

尝试把这个东西均摊到每一个位置上,首先是让它们聚在标记点的中位数附近,那么每一个非标记点的代价就是左右两侧标记点个数的 min(有这么多标记点要跨过它)。

对于标记点内部的交换,那就是算下逆序对。

这里要将代价均摊到每一个位置上是为了方便 dp 的过程中每加入一个点来计算代价,比较类似费用提前计算的思想。

从前往后枚举 i,设 fS 为考虑标记点集合是 S 的代价,转移的时候枚举当前这个是否是标记点:

  • 标记点:代价为以它为结尾的逆序对个数;
  • 非标记点:min(popcount(S),kpopcount(S)),左右两侧标记点个数的 min

Code

posted @   do_while_true  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 59 seconds

点击右上角即可分享
微信分享提示