Loading

[Edu 174 D] Palindrome Shuffle

前言

理一下我最近的问题

  • 剪枝不果断, 效果不好
  • 听讲老是听不懂

最近就大概跟着做就行了

  • 定义操作 (约束) 和开销 / 收益, 要求最值化开销 / 收益
    • 推式子计算约束条件
    • 模拟操作情况, 找到最好开销, 注意最大和最小, 一般来说可以贪贪心 (将简单情况先处理, 然后在基础上处理最值)
    • 考虑操作对答案的影响 (推式子) , 据此对操作进行排序

思路

题意

给定一个字符串, 任意排列字符串中的一个子串, 使得得到的字符串是回文串, 求出最小的子串长度

不难发现对于相同的前后缀, 我们可以先行去掉不影响答案
对于中间的一部分, 如何选择子串才能最小化长度不影响转化成回文串?

  • 一种特殊情况

    ab | ab
    cba | cba
    

    这种情况下\((\)即左右部分字符集相等\()\)调整一半的一部分就可以做到对称

  • 其他情况
    这种情况下需要同时覆盖左右部分
    问题是怎么选择子串长度最小

    • 如果从左往右选
      左边的一个部分包含的字母都要求完全匹配到右边, 也就是说对于每一个字符, 左边的出现次数大于右边的出现次数, 就行
    • 如果从右往左选
      右边的一个部分包含的字母都要求完全匹配到左边, 也就是说对于每一个字符, 右边的出现次数大于左边的出现次数, 就行

总结

唐诗贪心, 不太好说
跟着样例模拟就行了

posted @ 2025-02-19 09:59  Yorg  阅读(49)  评论(1)    收藏  举报