664. 奇怪的打印机
1682. 最长回文子序列 II(plus会员)
1690. 石子游戏 VII 1745. 回文串分割 IV
1000. 合并石头的最低成本
664. 奇怪的打印机
- 确定dp数组含义和下标:dp[i][j] 为 [i, j] 区间的最小打印次数
- 递推公式:对于区间,可以从边界开始考虑
- 当s[i] == s[j]时,打印 s[i] 时顺便就可以打印 s[j],中间的区域是可以被覆盖的,所以只考虑边界,只需
要打印一次 i 位置,j 位置也被顺便打印完成,即等于 j 位置不计算的次数,所以 dp[i][j] = dp[i][j - 1]
- 当s[i] != s[j]时,可以分为两个区间,[i, k]和[k + 1, j], k 取 [i, j),此时只要找到两个区间d打印次数之和
最小的次数即可,即 dp[i][j] = min(dp[i][k] + dp[k + 1][j])
- 初始化:考虑到区间长度为1,即 i == j 时,dp[i][i] = 1
- 遍历顺序:i 从大到小,j 从小到大,因为在 s[i] != s[j] 的情况下,dp[i][j] 依赖于 dp[i][k], dp[k + 1][j]
- 如果 i 从 0 开始,k 从 i 开始,那么对于dp[k + 1][j],左边界取的是 i + 1,此时可能就没有被遍历过
- 如果 i 从 n - 1 开始,k 从 i 开始,那么对于dp[k +1][j],左边界取的是 i + 1,此时 i 是倒序遍历,所以
dp[k + 1][j] 肯定被遍历过了
- j 同理,只有从 i + 1开始,k 从 i 开始,dp[i][k]才会被遍历过,保证无后效性
BFS

一些实现细节:
- 是否访问的标识一定要处理好,不然就炸了
- 根据题意,选择使用邻接矩阵、邻接表存储图(偏向邻接表)
- 和背包模型一样,要学会抽象
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序