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. 在这里插入图片描述

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

代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值