摘要:
"传送门" 题目大意: 求一个矩阵的最大子矩阵和。 题目分析: 刚开始考虑了一下dp方程的递推,但是不好转。简便的方法是预处理sum[i][j]表示第i行的前j个元素之和,之后$n^3$枚举子矩阵就可以了。 code 阅读全文
摘要:
"传送门" 题目大意: 问两个词能不能加错拼成一个第三个词。 题目分析: dp方程还是很好想:dp[i][j]表示第一个词前i个和第二个词前j个能不能拼成第三个词的前i+j个。 初始化如果s1[1] == s[1] 那么dp[1][0] = true,s2[1] == s[2]那么dp[0][1] 阅读全文
摘要:
"传送门" 题目大意: 举个例子: apple 和 peach,合成一个词最短是appleach。像这样求两个单词合成后的最短长度。 题目分析: 首先肯定想到是LCS只输出一遍,难点就是怎么输出:其实只要向求LCS时的顺序再走一遍。 code 阅读全文
摘要:
"传送门" 题目大意: 3 n的字符串,A、B、C分别有n个,w(X)代表X字母出现的次数,要求该字符串的所有前缀中w(A) = w(B) = w(C),问合法方案数有多少。 题目分析: dp转移较为容易:$dp[i][j][k] += dp[i 1][j][k] + dp[i][j 1][k] + 阅读全文
摘要:
"传送门" 题目大意: 给两个序列,数均在$[1, n n]$,求最长公共子序列。 题目分析: 若用传统的$LCS$显然会炸,因为数字均在$[1, n n]$,若序列a的数的位置$1~n$,数列b变为b[i]在a中出现的位置,求出LIS即可。$o(n log n)$ code cpp include 阅读全文
摘要:
"传送门" 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围$n 580ms cpp include using namespace std; const int N = 15; int 阅读全文
摘要:
"传送门" 题目大意应该都清楚。 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了。 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独、整块),莫队完后,现在的权值分块就是关于当前区间的。然后再从左到右扫描分块,直到数字个数+该块个数 阅读全文
摘要:
"传送门" 题目分析 类似于区间型的主席树,树上的主席树也能通过前缀的和差来计算指定路径。 建立主席树时,子节点从父节点更新,表示从根节点到该子节点的路径线段树(存放节点权值),则若要提取指定路径u v, 先计算lca, 该路径即为 ,其余就没什么难点了。 wa了半天,原来是lca写错了!! cod 阅读全文
摘要:
"传送门" 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l 1,r两树上按照线段树搜索次数大于(r l + 1) / 2的数。 code cpp include using namespace std; const int N = 500050, M = 500050; int 阅读全文
摘要:
"传送门" 题目分析 在只打会主席树模板的情况下做了这道题,也算是深有体会。 首先任务可以差分:一个任务是(s, e, p), 则在s处+1, 在e+1处 1,符合前缀。但是我们要查询指定时间的前k任务之和,可以想到主席树,且符合差分性质。 1~n每个节点代表从开始时间到现在,每个节点下是一颗权值线 阅读全文