设计状态先问自己什么(C++)

给一个新问题设计 DP 状态,要先问【0】。

开始练习 →

交付一个进阶 DP 要验什么

第 1 步:五样 DP 一起验收 第 2 步:背包:和小规模暴力对拍 第 3 步:滚动:和小规模暴力对拍 第 4 步:区间:和小规模暴力对拍 第 5 步:网格:和小规模暴力对拍 第 6 步:状压:和小规模暴力对拍 第 7 步:全都对上,才算

开始练习 →

五项一起对得上吗

运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <vector> using nam

开始练习 →

第一步两种背包

最终作品第一步:补全 0/1 背包和完全背包(同一批物品、容量 10),输出「0/1 的答案/完全的答案」。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11),写成 vector<pair<int, i

开始练习 →

第二步压掉一维

二维版已给出,补全一维版,输出三样:一维答案/二维格子数/一维格子数。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11),写成 vector<pair<int, int>>,auto [w,

开始练习 →

第三步两个区间 DP

最长回文子序列已给出,补全石子合并(按区间长度从短到长填),输出「石子 4、1、2、3 的最小代价/bbbab 的回文长度」。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步三个二维 DP

网格路径和带障碍的网格路径已给出,补全编辑距离,输出「3 行 4 列/(1,1) 有石头/horse 变 ros」三个答案。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付独立设计 DP 状态

这是这条路线的最终作品。前四步的代码已经合在一起,补全状压版 tsp 和暴力版 tsp_brute,然后一次验完五条:0/1 背包 20、完全背包 25;二维和一维答案相同、格子数从 44 降到 11;石子合并 19、最长回文子序列 4;网

开始练习 →

DP 表太大内存超限先想什么

一个 DP 在题目的内存限制里开不出二维表,最先该想的是【0】。

开始练习 →

补写一维 0/1 背包

场景:实验机上 ~/work/dp/knap.cpp 读入物品和容量,knap01 还没写。 任务:补全 knap01:每件最多拿一次,只用一个一维数组。make 编译,./knap < sample.txt 自测。check 会用每

开始练习 →