06 2021 档案
摘要:状态:f[i][j][k]表示第i行放了j个皇帝,状态为k的方案。 那么首先预处理出所有可行的方案,以及两两可以相互转移的答案。 从b状态转移到a状态就是 :f[i][j][a]+=f[i−1][j−count(a)][b] 小tips: 判断两行有没有相邻的一可以判断: \((
阅读全文
摘要:个人理解:f[i][j]已经构造出前i个字母(相当于走了n步),并且当前和T已经匹配到第j个字母的方案。 设m为字符串T的长度: 在本题中,根据kmp匹配的思想,j + 1如果可以和当前第i个字母相同,那么j可以跳到j + 1,否则,j就回退,跳到next[j]我们构造的字串无论如何不能与T
阅读全文
摘要:AcWing 831. KMP字符串 #include <iostream> #include <string> using namespace std; const int N = 1E5 + 10, M = 1E6 + 10; int n, m; char p[N], s[M]; int ne[
阅读全文
摘要:AcWing 1058. 股票买卖 V 本题多了一个冷却期的状态:我们设为f[i][2], 无货设为f[i][0], 有货设为f[i][1]。 定义一个冷却期感觉比y总的那个状态定义更好理解,尤其在初始化的时候。 初始化:f[0][0] = 0 其余为-0x3f3f3f3f。 \(f[i
阅读全文
摘要:AcWing 1057. 股票买卖 IV 状态表示: f[i][j][0]表示,在1n天中,进行j次交易,手中无货时候的最大利润。 f[i][j][1]表示,在1n天中,进行j次交易,手中有货时候的最大利润。 利用状态机模型分析: \(f[i][j][0] = max(f[i - 1][j]
阅读全文
摘要:AcWing 2. 01背包问题 #include <iostream> #include <algorithm> using namespace std; const int N = 1010; int n, m; int v[N], w[N]; int f[N]; int main() { ci
阅读全文
摘要:状态机模型 状态机就相当于状态压缩,从常规dp的点表示一个过程,对本题来说,有f[i][0], f[i][1]两种。 对于f[i][0]就相当于,走了i步,不选第i个物品的状态,那么它可以从f[i - 1][0]不选第i-1件物品, f[i - 1][1]选第i件物品转移而来,得$f[i][0] =
阅读全文