摘要:
"传送门" 题目大意: 问两个词能不能加错拼成一个第三个词。 题目分析: 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 阅读全文
摘要:
"传送门" 题目大意应该都清楚。 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了。 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独、整块),莫队完后,现在的权值分块就是关于当前区间的。然后再从左到右扫描分块,直到数字个数+该块个数 阅读全文