随笔分类 - 进阶指南
摘要:线性dp问题 答案就是$f(N_1, N_2, N_3, N_4, ..., N_)$,max是行数的最大值,此题的max为5 下面举一个阵列的例子,并分析为什么是dp,状态怎么设计,状态怎么枚举,合法状态和非法状态 **复杂度:**由于最多30人,由乘法原理,总状态数为每一行的人数的可能情况的乘积
阅读全文
摘要:题意:给你m个询问,每一个询问给出一个区间的左右端点和区间中的1的数量的奇偶性,输出不出现矛盾的最大的k值,即1k无矛盾,1k + 1矛盾。 方法1:带权并查集 + 离散化 设区间左右端点a和b,01序列的前缀和数组为s,那么[a, b]中的1的个数cnt = s[b] - s[a - 1], 那么
阅读全文
摘要:带权并查集:维护结点到其根结点的的一些信息的并查集 本题维护的是每一个结点到它的根的距离 #include<iostream> using namespace std; const int N = 30010; int p[N]; int d[N]; int cnt[N]; /* d[x]本身存放的
阅读全文
摘要:#include<iostream> #include<vector> #include<algorithm> using namespace std; #define PII pair<int, int> #define x first #define y second const int N =
阅读全文
摘要:完全背包模型 二维 #include<iostream> using namespace std; const int N = 4010; const unsigned int mod = 1 << 31; unsigned int f[N][N]; int n; int main(){ cin >
阅读全文
摘要:离散化+并查集 复杂度:\(O(Tnlogn)\) 被函数名给坑了,因为二分和并查集都习惯用find函数。。。 #include<iostream> #include<vector> #include<algorithm> using namespace std; const int N = 200
阅读全文