NOIP训练赛#15
时间安排
省流:没有固定安排,全部打暴力,调不过这个就调那个(题太难了QAQ)
题解
T1
设 \(dp_{i,j}\) 表示用 \(i\) 个节点构造一棵深度为 \(k\) 二叉树的方案数
考虑枚举一棵子树的大小 \(k\) ,但是复杂度将会达到 \(n^3\) (卡慢),会被卡常
故考虑枚举最大子树大小,则状态转移方程为 \(dp_{i,j}+=\sum_{l=1}^{j-2}dp_{k,l}\times dp_{i-1-k,j-1}+dp_{k,j-1}\times \sum_{l=1}^{j-1}dp_{i-1-k,j-1}\times C_{i-1}^k\) (一棵深度为 \(j-1\) ,另外一棵从 \(1\sim j-1\) 随便选以及一棵深度为 \(1\sim j-2\) (避免算重)另一棵深度为 \(j-1\) )
答案即为 \(dp_{n,i}\)
p.s.:此题要用杨辉三角预处理组合 \(C\) ,否则被卡常
T2
状压+背包好题
小技巧:在遇到考虑质数的题的时候可以先考虑将原范围开平方,来区分可以出现多次发的质数和最多出现一次的质数
首先将问题转换为将范围在 \(1\sim 500\) 之内的质数自由组合的方案数,且每个质数只能选择一次,状压DP,但质数有 \(95\) 个质数,会 \(RE\)
考虑前 \(8\) 个数字(第一类质数)可以重复出现在给定区间内数字中,故只能暴力状压 \(DP\) 转移(因为会在一个数字中出现多个第一类质数),然而后面的质数(第二类质数)在给定区间内的数字中只能出现一个(任意两个第二类质数的积均大于 \(500\) ,不需要考虑一个数有 \(23\) 这个因数而另一个数有 \(23\times 25\) 这个因数的情况),所以只能出现一次,故可以直接分组背包转移即可
状态设计:设 \(DP_{i,s,j}\) 表示当前考虑到第 \(i\) 类数字,当前第一类质数的选择状态为 \(s\) ,且已经选了 \(j\) 个数字
预处理每个数的最大质因数即可(主要为了区分第一类和第二类质数)
T3
考虑贪心
两个人均采取最优策略,故会先朝着对方走,直到两人不可再次行走为止,此时两者在同一个点上,然后考虑两者取子树的顺序一定是从大到小,故直接考虑那些子树归 \(x\) ,那些子树归 \(y\) ,则两者一定是先手取排序后子树贡献排在奇数位的, \(y\) 一定是取偶数的,所以直接对奇数的和偶数的分别进行前缀和,然后特殊考虑遇到 \(x\) 和 \(y\) 初始经过的子树后的奇偶性即可
T4
单侧递归线段树
考虑线段树中维护 \(4\) 个值:
-
总共匹配多少个
-
总共向右边超出多少个值
-
左区间超出部分的答案
-
区间内匹配的答案
然后用 \(logn\) 的复杂度维护第三个值即可,其余维护复杂度为 \(O(1)\)
动态开点权值线段树维护即可

浙公网安备 33010602011771号