摘要:
树状数组学习笔记 树状数组的使用场景:可差分且有结合律的运算符,如 ^ + * 树状数组优点:编码简单,常数小,但思维量较大。 板子: struct B_tree { int c[N]; void clear(){ memset(c,0,sizeof c); } void add(int x,int 阅读全文
posted @ 2025-02-09 12:49
hnczy
阅读(56)
评论(0)
推荐(0)
摘要:
数位dp的标志: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 \(10^{18}\)),暴力枚举验证会超时。 数位dp的模板题 A - 不要62 实现非常 阅读全文
posted @ 2025-02-09 12:48
hnczy
阅读(102)
评论(0)
推荐(1)
摘要:
矩阵乘法 对于线性简单的 dp 可以使用矩阵快速幂加速转移,可以从 \(O(n)\) 的时间复杂度降到 \(O(k^3\log n)\) ( \(k\) 为矩阵的大小,通常小于10) 先给出矩阵乘法的模板代码: struct MAT { int c[15][15],n,m; MAT() { mems 阅读全文
posted @ 2025-02-09 12:47
hnczy
阅读(70)
评论(0)
推荐(0)
摘要:
斜率优化dp 的小总结 首先下凸包/上凸包的求法可以使用单调队列/单调栈来实现。 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5E5 + 5; struct node { int 阅读全文
posted @ 2025-02-09 12:47
hnczy
阅读(54)
评论(0)
推荐(0)
摘要:
一道非常综合的背包题。 我们发现每一个点的选择对它的父亲的合成有影响。 这样的话我们可以尝试把这个因素记下来。 \(f_{rt,i,j}\) 来表示 \(rt\) 及它的子树中选择 \(i\) 个作为合成的材料的话,花费 \(j\) 的最大战斗力。 这样的话我们就可以直接用多重背包来写了。 先枚举 阅读全文
posted @ 2025-02-09 12:45
hnczy
阅读(44)
评论(0)
推荐(0)

浙公网安备 33010602011771号