区间 DP 的填表顺序

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

开始练习 →

把四堆石子合成一堆

四堆石子 4、1、2、3,每次只能合并相邻两堆,代价是这两堆之和。求把它们合成一堆的最小总代价。运行下面这段程序: #include <algorithm> #include <iostream> #include

开始练习 →

最长回文子序列

从字符串里挑出若干字符(可以不连续,但顺序不变),要它正着读反着读一样,最长能有多长?两个例子:bbbab 和 cbbd。运行下面这段程序: #include <algorithm> #include <iostream&

开始练习 →

写石子合并

补全 merge_cost:按区间长度从 2 到 n 外层循环,区间里枚举断点 k。pre 是前缀和,用来 O(1) 取区间和。输出石子 4、1、2、3 的最小代价。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

写最长回文子序列

补全 lps:两端字符相同就 dp[i+1][j-1] + 2,不同就取 dp[i+1][j] 和 dp[i][j-1] 里大的。输出 bbbab 的答案。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

填表顺序写错会怎样

merge_cost 按区间长度填(已给出),补全 merge_bad:外层是左端点 i 从小到大,内层 j 从 i+1 往右。输出「对的结果/错的结果」。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

两个区间 DP 一起交

石子合并已给出,补全最长回文子序列,输出「石子合并的答案/bbbab 的回文长度」。两个的状态都是「区间 i 到 j」,差别只在转移里怎么拆。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

网格路径的转移方程(C++)

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

开始练习 →

编辑距离的三种操作

第 1 步:第一行、第一列都只有一条路 第 2 步:第 2 行第 2 列:上加左 第 3 步:第 2 行第 3 列:上加左 第 4 步:第 2 行第 4 列:上加左 第 5 步:第 3 行第 2 列:上加左 第 6 步:第 3 行第 3 列

开始练习 →

三行四列的网格有几条路

从左上角走到右下角,只能往右或往下。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <ve

开始练习 →