【题解】「HAOI2016」字符合并
题目描述
有一个长度为n 的01 串,你可以每次将相邻的k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这k 个字符确定。你需要求出你能获得的最大分数。
solution:
可以看出本题的解法是区间DP。我们发现,区间[l,r]每次操作的区间不会有交集,因为假设最后只剩了几个点,但这几个点其实是有一个完整的区间变过来的。换句话说,在最后剩下的几个数之中,是由左右两个区间分别独立操作得到的。我们称这样的问题具有可划分性。
再看数据
n
<
=
300
n<=300
n<=300,可以放心大胆地状压。
事实上,区间最后的合并长度是不用写进状态的,为(len-1)%(k-1)+1
几个小优化:
- 枚举k时可以K-1格地跳,因为1+s*(K-1)最终一定被合并成一个点
- color枚举时最多为(1<<len2)-1,其中len2为最终长度
时间复杂度 O ( n 2 ⌊ n k ⌋ ∗ 2 k ) O(n^2 \lfloor \frac{n}{k} \rfloor*2^{k} ) O(n2⌊kn⌋∗2k),这个复杂度虽然看上去和暴力差不多,但实际运行远低于该上界。
细节优化有点多。状压是精髓。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530373.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」