ABC225F
题面
link
有个字符串,从中选出个以任意顺序拼起来,求所有情况中字典序最小的。
题解
首先考虑如果已经选出了个字符串,我们应该按什么顺序拼起来。
算是一个trick,重载小于号为。(如果交换两个相邻的可以更优的话肯定交换)
但是这个排序方式符合要求吗,会不会出现但的情况呢。
其实不会,你可以将长度相等的两个字符串的字典序比较想象成两个26进制的数比较大小,所以:
最后你会发现其实排序依照的只有自己的信息,并没有必须得两个字符串才会有意义。
所以按这个方法给字符串排序之后,就可以进行DP看究竟选哪个。
方法有很多,但错误方法更多。大致原因都是因为字符串没有局部最优得整体最优,即如果是的前缀,则的,但可能出现的情况,所以正确DP的核心就是去除这种前缀关系。
-
方法一:从后往前DP,这样就保证了不会出现前缀的情况,而后缀情况因为后面不会再接新字符串了,所以可以保证最优。转移:
-
方法二:将长度引入状态,在相同长度下,字典序最小一定更优,也去除了前缀带来的影响。
启发
- 给多个字符串拼接最小字典序的排序方法。
- 处理字符串字典序最小/最大的问题时,注意前缀的情况,以及通过反向DP去除影响。
本文作者:qwq123
本文链接:https://www.cnblogs.com/qwq-123/p/15905626.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步