网格路径的转移方程

网格路径的转移方程

只能往右或往下走,走到某一格的路径数等于【0】。

阅读更多 →
⚠️ 两个区间 DP 一起交

⚠️ 两个区间 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 的填表顺序

区间 DP 必须【0】地填表。

阅读更多 →
区间 DP 的状态是什么

区间 DP 的状态是什么

区间 DP 里 dp[i][j] 表示【0】。

阅读更多 →
⚠️ 答案与空间一起摆出来

⚠️ 答案与空间一起摆出来

把二维版和一维版都写出来,输出四样:二维答案 / 一维答案 / 二维格子数 / 一维格子数。

阅读更多 →