ZROI 19.08.03 DP入门】的更多相关文章

\(n\)个点,要求连一棵树,设点\(i\)的度数为\(d_i\),则其贡献为\(f(d_i)\mod 59393\),其中\(f(x)\)是一个\(k\)次多项式.最大化总贡献.\(n\leq 3000, k\leq 10, a_i\leq 50\). 对于任意一种度数序列,都可以生成一棵对应的树. 每个点度数\(\geq 1\),\(-1\)后等于\(n\)个点分\(n-2\)个度数. \(O(n^3)\)dp:\(f_{i,j}\)表示前\(i\)个点,度数和为\(j\)的最优解,转移的时…
经典问题,给一张图,支持加边/删边/询问两点连通性. 离线统计边权(删除时间),lct维护最大生成树即可. 也可以按时间分治,维护一个可回退并查集即可. 主定理 很好用,但是记不住. 有一种简明的替代方式:画一棵递归树,考虑层数和每层的节点数(线段树分析.jpg) 分治时递归和处理中心的顺序可以是任意的,可以按照具体情况选择,以 简化复杂度. 快速排序的期望复杂度: \[T(n)=\frac{1}{n}\sum_{i=1}^n[T(i-1)+T(n-i)]+n-1=\frac{2}{n}\sum…
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "我发现问题的根源是大家都不会前缀和."--敦爷 A 敦爷spj写错了,差点把蒟蒻swk送走 \(50pts:\) 考虑不输出方案怎么做.显然是树形dp. 设\(f_{i,j,\{0/1/2\}}\)表示\(i\)的子树中,有\(j\)条链,根节点状态为:\(\{\)没选\(/\)选了向下的一条链\(/\)选了向下的两条链\(\}\)的最优解. 对于一棵子树,开始时只考虑根节点,依次合并每个儿子.合并时需要枚举父亲和儿子…
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. dlstql,wsl A \(10pts:\) \(a=100,T=100\),对每个排列构造一个反的,一步到位即可. \(20pts:\) \(a=50\),构造\(1\)和所有元素交换的排列,实现交换\((v,u)\)可以令两者分别与\(1\)交换,选择排序即可. \(40pts:\) \(a=30\),构造前\(25\)个元素与\(1\)交换的排列,另有一个排列交换前\(25\)个与后\(25\)个元素. \(a=20\)时…
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操作后还原.复杂度\(O(3^n)\). 全0或全1可以直接返回. 写法优秀可以过\(80pts\). \(100pts:\) 类似非递归fft的写法,bitrev后可以位运算优化. 最下面四层可以预处理,复杂度\(O(3^{n-4})\). 然后疯狂卡常就完事了( 然而由于swk人菜常数大,明明所有…
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\(i\)中,两个赞助商分别选了\(j,k\)个的最优解. 对枚举的上下界卡的紧一点,按照树上背包的聚合分析,复杂度是\(O(n^3)\)的,可以通过. \(100pts:\) 观察数据范围可以发现,这题的子树大小限制可以抽象成一个经典的网络流模型. 跑一个最大费用流就好了. 我写丑了,每个点拆了\(5…
给出\(n\)个数,用最少的\(2^k\)或\(-2^{k}\),使得能拼出所有数,输出方案.\(n,|a_i|\leq 10^5\). 显然一个绝对值最多选一次.这个性质非常强. 如果所有都是偶数,可以直接除以\(2\). 否则\(1\)或\(-1\)必须选,暴力枚举选哪个然后递归,每层去重,发现最多只会递归\(\log a\)次.总复杂度\(O((n+a)\log n)\),等价于线段树上区间长度总和. \(n\)个数,每次可以花费\(1\)的代价给某个数\(+1\)或\(-1\),问变成不…
1.总览 LCT 链分治(树剖) 点/边分治 2.点分治 一棵树,点有\(0/1\),多次修改,询问最远的两个\(1\)距离. 建出点分树,每个子树用堆维护:①最远的\(1\)距离:②它的每个儿子的①堆顶: 全局维护每棵子树②堆最大的两个值,每次修改暴力改就可以. 时间复杂度\(O(n \log^2n)\)(基本动态点分都是\(\log^2\)以上的复杂度--然而仍然随便过\(10^5\),小常数可能性微存?). 一棵树,点有点权,每次询问距离一个点不超过\(k\)的点权和. 每个点维护一个深度…
写在前面:由于我数学基础不好,加上缺乏生成函数知识,所以这一下午我都处在掉线和非掉线的叠加态.而且我写\(\LaTeX\)很慢,所以笔记相当混乱而且不全面.说白了就是我太菜了听不懂. 1.一般生成函数 直接把序列写成多项式的形式.可以做个背包. 形式幂级数:只关心系数,不关心\(x\)的具体取值.只要运算方便,就可以把\(x\)取任意值来计算. \[1+x+x^2+-=\frac{1}{1-x}\] 显然这个东西是不对的,比如\(x=2\)就gg了. 但是我们硬点\(0<x<1\),它就是对的…
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(70pts:\) 维护一个栈,从一侧向另一侧扫描,如果新加入的元素与当前栈顶相同,则出栈,否则进栈.显然一个子串是括号序列,当且仅当栈为空. 枚举起点,暴力模拟即可.复杂度\(O(n^2)\). \(100pts:\) 对于一个右端点,考虑哪些左端点可以和它匹配. 发现所有合法的左端点,两者栈的内容都是相等的,可以Hash判断. 实际上考虑每次加入字符时,只会在末尾变动一次,可以用trie树维护.复杂度\(O(\sigma…