题目传送门
题意
- 给我们一个字符串 S,问可以将 S 分割成几个子区间,要求分割出的每个子区间的都是回文串,输出最小分割成的区间的数量。
思路
- 这题明显是区间 dp,设出来状态转移方程:dp [i][j] 表示将 [i, j] 这个区间分割成的最少会问区间的数量。
- 考虑状态转移:[i, j] 这个区间的最优值来自它的子区间组成,于是我们枚举 [i, j] 区间的分割点,去转移:
- 当 S [i] == s [j] 的时候 我们把 dp [i][j] 初始化为 dp [i+1][j -1], 否则初始化为 inf,
- 接着
-
- 算法复杂度 O (n^3),会收获一个 TLE。
- 这里会超时主要是因为我们枚举区间复杂度为 n^2, 枚举 md 的时复杂度变为 n^3, 所以我们要优化掉一层 for 循环
- 因此我重新设状态转移方程为 f [i] 表示分割 1~i 区间的最小分割成回文串的数量。
- 于是有了下面的状态转移
-
代码