神仙题. 考虑在一棵 Trie 上进行染色,将可能出现的串的末尾染成黑色.答案就是黑点的个数.一开始只有 \(A\) 的末尾点是黑色. 当出现一个字符(不是退格)\(c\) 时,就要将每个黑点的 \(c\) 儿子都染成黑色. 然而这样一个点可能会有重复染色,不能直接乘 \(2\). 不妨记录一个 \(f[c]\) 表示有儿子 \(c\) 且该儿子是黑色的点的个数. 那么此时答案 \(ans\) 应该变成 \(2ans-f[c]\)(减掉已经是黑的儿子 \(c\) 的个数),同时更新一下 \(f[…
题目 P4965 薇尔莉特的打字机 快到十二点了正在颓废突然发现了一道好题 虽然毒瘤,但确实是容斥原理的好题啊,做法也特别巧妙(标程 思路 题目大意(怕自己突然忘) n个初始字符,m个操作(加入或删除),任何一个操作都可能无效,求最后不同的字符方案数\((n,m<=5*10^6)\) 先考虑无删除操作 这里的\(t_{0..i}\)为一个字串,\(\widetilde{t_{0..i}}\)指该字串不同的子序列个数,\(dp_i\)为\(\widetilde{t_{0..i-1}}\) 若\(t…
洛谷题目传送门 Dalao的题解多数是什么模拟退火.DFS剪枝.\(O(3^nn^2)\)的状压DP之类.蒟蒻尝试着把状压改进了一下使复杂度降到\(O(3^nn)\). 考虑到每条边的贡献跟它所在的层有关,所以如果我们能够将一层的边一起加进去,计算就会方便许多.于是想办法把这个转移过程状压一下. 设\(f_{i,j}\)为当前已选点集为\(i\),下一层加入的点集为\(j\)时,新加入的所有点与原有点之间最小的边权之和.计算的具体实现,我们\(O(2^n)\)枚举\(i\),再枚举\(i\)的补…
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\forall a \le b \le c \le d\)有 \[val(a,d) + val(b,c) \ge val(a,c) + val(b,d)\] 那么我们称函数\(val(i,j)\)满足四边形不等式 一般地,当我们需要证明一个函数\(val(i,j)\)满足四边形不等式时,只需证对于\(\fo…
题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #include<iostream> using namespace std; #define maxn 355 int n,m,ans; ],point[maxn]; ][][][]; int main() { cin>>n>>m; ;i<=n;i++) cin>>…
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一列求出长度为n的前面算出来的最大值的最大值,前面算出来的最小值的最小值.如果直接做是n的三次方,但是用单调队列优化后就是n方的. #include <algorithm> #include <iterator> #include <iostream> #include &l…
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求解可以组合的重量种类数.简单dp求解.复杂度为 \(O(n\times n\times m)\) . 时间复杂度为 \(O(n^m \times n\times n \times m)\) .实际复杂度应该比这个小很多,剪枝效果明显. #include<stdio.h> #include<s…
题意:中文题,按照题目要求的二叉树生成方式,问(1)叶平均深度 (2)树平均深度 解法:这道题看完题之后完全没头绪,无奈看题解果然不是我能想到的qwq.题解参考https://blog.csdn.net/Maxwei_wzj/article/details/82262755这位大佬的,这里讲下我的理解: 首先是第一问:第一问会简单一些,设f[i]代表叶节点为i的树的叶平均深度,那么因为是平均那么 i*f[i] 就是叶子总深度啦.在叶子深度x下拓展得到的新贡献是 2(x+1)-x=x+2  .那么…
洛谷题面传送门 一道笛卡尔树的 hot tea. 首先我们考虑一个非常 naive 的区间 DP:\(dp_{l,r}\) 表示区间 \([l,r]\) 的答案,那么我们考虑求出 \([l,r]\) 中最大值的位置所在的位置 \(p\),那么如果我们选取的 meeting 的位置 \(\le p\),那么显然 \([p+1,r]\) 部分的贡献都是 \(a_p\),\([l,p]\) 部分的总共先最小是 \(dp_{l,p}\),最优代价为 \(dp_{l,p}+a_p·(r-p)\),否则 \…
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加速(数列) P3390 [模板]矩阵快速幂 P1306 斐波那契公约数 P1962 斐波那契数列 P4838 P哥破解密码 由题意可得:相邻两个珠子中必有金属性珠子.这其实就可以理解为不能有连续的两个木属性珠子.这样一看,此题就和P4838 P哥破解密码差不多了.只不过这题是个2*2矩阵乘法 进入正…