合集-dp
摘要:一道非常综合的背包题。 我们发现每一个点的选择对它的父亲的合成有影响。 这样的话我们可以尝试把这个因素记下来。 frt,i,j 来表示 rt 及它的子树中选择 i 个作为合成的材料的话,花费 j 的最大战斗力。 这样的话我们就可以直接用多重背包来写了。 先枚举
阅读全文
摘要:矩阵乘法 对于线性简单的 dp 可以使用矩阵快速幂加速转移,可以从 O(n) 的时间复杂度降到 O(k3logn) ( k 为矩阵的大小,通常小于10) 先给出矩阵乘法的模板代码: struct MAT { int c[15][15],n,m; MAT() { mems
阅读全文
摘要:不带删的尺取。 这个技巧其实是一个运用双栈来模拟队列的一个应用,尺取可以理解为一个队列。 其实就是用一个栈来记队头,一个栈来记队尾,每个栈记对应的对应点记每个点的权值或下标,和它所对应栈的前缀。 每一次入栈时直接入栈(队头)更新前缀即可,而出栈时,若栈(队尾)已经空了,这时就应该把队头的栈直接倒着插
阅读全文
摘要:数位dp的标志: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 1018),暴力枚举验证会超时。 数位dp的模板题 A - 不要62 实现非常
阅读全文
摘要:斜率优化dp 的小总结 首先下凸包/上凸包的求法可以使用单调队列/单调栈来实现。 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5E5 + 5; struct node { int
阅读全文