网格路径的转移方程
只能往右或往下走,走到某一格的路径数等于【0】。
阅读更多 →
⚠️ 两个区间 DP 一起交
把石子合并和最长回文子序列都写出来,把两个答案拼起来输出(石子合并在前,回文用 bbbab)。 写完对照一下:两个的状态都是"区间 i 到 j",差别只在转移里怎么拆。
阅读更多 →
⚠️ 填表顺序写错会怎样
写两个石子合并:一个按区间长度填(对的),一个按左端点从小到大填(错的)。 把两个结果拼起来输出(对的在前)。
阅读更多 →
写最长回文子序列
补全 lps:两端字符相同就 dp[i+1][j-1] + 2,不同就取 dp[i+1][j] 和 dp[i][j-1] 里大的。 输出 bbbab 的答案。
阅读更多 →
写石子合并
补全 merge_cost:按区间长度从 2 到 n外层循环,区间里枚举断点 k。pre 是前缀和,用来 O(1) 取区间和。
阅读更多 →
最长回文子序列
从字符串里挑出若干字符(可以不连续,但顺序不变),要它正着读反着读一样,最长能有多长?两个例子:bbbab 和 cbbd。运行下面这段程序: def lps(s): n = len(s)
阅读更多 →
把四堆石子合成一堆
四堆石子 [4, 1, 2, 3],每次只能合并相邻两堆,代价是这两堆之和。求把它们合成一堆的最小总代价。运行下面这段程序: def merge_cost(a): n = len(a)
阅读更多 →
⚠️ 区间 DP 的填表顺序
区间 DP 必须【0】地填表。
阅读更多 →
区间 DP 的状态是什么
区间 DP 里 dp[i][j] 表示【0】。
阅读更多 →
⚠️ 答案与空间一起摆出来
把二维版和一维版都写出来,输出四样:二维答案 / 一维答案 / 二维格子数 / 一维格子数。
阅读更多 →