Palindrome Partitioning LightOJ - 1044(区间 dp)

题目传送门

题意

  1. 给我们一个字符串 S,问可以将 S 分割成几个子区间,要求分割出的每个子区间的都是回文串,输出最小分割成的区间的数量。

思路

  1. 这题明显是区间 dp,设出来状态转移方程:dp [i][j] 表示将 [i, j] 这个区间分割成的最少会问区间的数量。
  2. 考虑状态转移:[i, j] 这个区间的最优值来自它的子区间组成,于是我们枚举 [i, j] 区间的分割点,去转移:
    1. 当 S [i] == s [j] 的时候 我们把 dp [i][j] 初始化为 dp [i+1][j -1], 否则初始化为 inf,
    2. 接着
    3. Palindrome Partitioning LightOJ - 1044(区间 dp)

  3. 算法复杂度 O (n^3),会收获一个 TLE。
  4. 这里会超时主要是因为我们枚举区间复杂度为 n^2, 枚举 md 的时复杂度变为 n^3, 所以我们要优化掉一层 for 循环
  5. 因此我重新设状态转移方程为 f [i] 表示分割 1~i 区间的最小分割成回文串的数量。
  6. 于是有了下面的状态转移
  7. Palindrome Partitioning LightOJ - 1044(区间 dp)

代码


上一篇:B2. Palindrome Game (hard version)(记忆化搜索)


下一篇:906. Super Palindromes