动态规划
Vectorxj
这个作者很懒,什么都没留下…
展开
-
[生成函数][DP] Codeforces 891 E. Lust
SolutionSolutionSolution设最后是这个样子 a=(ai−bi)a=(ai−bi)\textbf{a}=(a_i-b_i) ,可以通过数学归纳得到 res=∏iai−∏i(ai−bi)res=∏iai−∏i(ai−bi)res=\prod_{i}a_i-\prod_{i}(a_i-b_i) 那么考虑组合意义:E∑ibi=k∏i(ai−bi)==k!∏ibi!1nk∑∑ibi...原创 2018-03-14 10:26:08 · 562 阅读 · 0 评论 -
[期望DP] SRM 579 Div1 Hard RockPaperScissors
SolutionSolutionSolutionE(x)=∑x∈AScore(x)×P(x)E(x)=∑x∈AScore(x)×P(x)E(x)=\sum_{x\in A}Score(x)\times P(x) 只要考虑投了mmm轮得到(r,p,s)(r,p,s)(r,p,s)的概率和分数就好了。 概率可以这样DP。 ft,i,r,p,sft,i,r,p,sf_{t,i,r,p,s}表示...原创 2018-02-28 11:29:57 · 307 阅读 · 0 评论 -
[DP][分治] 51Nod 1934 受限制的排列
SolutionSolutionSolution一个显然的想法就是去找最小的那个数。 最小的数的 lll 和 rrr 就应该是 111 和 nnn 。 因为这是一个排列,我们把问题从最小值处 pospospos 分开,得到两个一样的问题 (1,pos−1)(1,pos−1)(1,pos-1) 和 (pos+1,n)(pos+1,n)(pos+1,n) 。设区间长度为 lenlenlen ,...原创 2018-03-07 18:45:28 · 425 阅读 · 0 评论 -
[最短路图][DP] ARC090 E - Avoiding Collision
SolutionSolutionSolution刚开始读错题+1 首先转化为总方案数减去不合法的方案数。 先建出最短路图。DP出从S,TS,TS,T到每个点的方案数fu,gufu,guf_u,g_u。 考虑在边上还是点上相遇。 点上的话就考虑disT=2disudisT=2disu\text{dis}_T=2\text{dis}_u的点,贡献是f2ug2ufu2gu2f_u^2g_u^...原创 2018-03-07 16:10:25 · 538 阅读 · 0 评论 -
[线段树分治][DP] LOJ #534. 「LibreOJ Round #6」花团
SolutionSolutionSolution操作相当于是动态的做一个背包DP。 离线的话,线段树分治一下。 因为结尾是已知的,可以一边分治,得到一个修改操作,就插到线段树。 只要保证分治从左到右,每个操作都在线段树上得到了实现。 1.5×1041.5×1041.5\times10^4可以跑O(n2logn)O(n2logn)\mathcal{O}(n^2\log{n})了解一下。...原创 2018-02-26 20:59:17 · 595 阅读 · 0 评论 -
[DP] ARC074 E - RGB Sequence
SolutionSolutiondpr,g,bdp_{r,g,b}表示考虑前max{r,g,b}max\{r,g,b\}个格子,三种颜色最后一次放在r,g,br,g,b位置的方案数。 把不合法的(r,g,b)(r,g,b)三元组ban掉就好了。#include using namespace std;const int MOD = 1000000007;const int N原创 2018-01-10 14:09:45 · 301 阅读 · 0 评论 -
[回文自动机][树形DP] CodeChef PALPROB
SolutionSolution建出回文自动机,每个节点再维护一个halfuhalf_u指针,指向长度不超过⌊lenu2⌋\lfloor{len_u\over2}\rfloor的最长回文后缀。 树形DP出每个点的nessness表示回文指数,答案就是∑nessu∗|rightu|\sum ness_u*|right_u|。 failfail链上的节点的lenvlen_v一定是递减的。可以倍原创 2018-01-09 11:41:53 · 340 阅读 · 0 评论 -
[FWT][DP] UOJ #310. 【UNR #2】黎明前的巧克力
SolutionSolutionDP很好想。 设ii个巧克力的集合幂级数fif_i,其中fi,0=1,fi,ai=2f_{i,0}=1,f_{i,a_i}=2。 答案就是这一堆东西对称差卷积起来。 暴力的做法就是把每个都FWT一下再乘起来。 集合幂级数ff的沃尔什变换fS^=∑T⊆U(−1)|S∩T|fT\hat{f_S}=\sum_{T\subseteq U}(-1)^{|S\cap原创 2018-01-17 10:12:46 · 444 阅读 · 0 评论 -
[树形DP] SRM 598 Div1 Hard TPS
SolutionSolution可以枚举根,在根放一个信标,就可以区分出深度不同的点。若在节点uu放信标,则可以区分出点vv是否在uu内。可以考虑从disu,v=depu+depv−2deplca(u,v)dis_{u,v}=dep_u+dep_v-2dep_{lca(u,v)}求出deplca(u,v)dep_{lca(u,v)},再与depudep_u比较即可。若节点uu的两个子树原创 2018-01-07 18:35:21 · 347 阅读 · 0 评论 -
[子集DP][Lucas定理] BZOJ 4903: [Ctsc2017]吉夫特
SolutionSolution原来可以把简单的题面写的那么长~ 根据Lucas定理,(nm)≡(⌊n2⌋⌊m2⌋)(nmod2mmod2)(mod2){n\choose m}\equiv {{\lfloor{n\over2}\rfloor}\choose{\lfloor{m\over2}\rfloor}}{n\bmod2\choose m\bmod 2}\pmod2有(00)=1,(01)原创 2018-01-15 16:32:13 · 506 阅读 · 0 评论 -
[树形DP][后缀自动机][后缀树] CodeChef January Challenge 2018 KILLKTH
SolutionSolution反串的后缀自动机的parent树就是原串的后缀树。 按dfs序记录子树大小前缀和,二分位置。 定位后就可以在节点内二分(可以直接算的啦)#include #define show(x) cerr using namespace std;typedef long long ll;typedef pairint, int> Pairs;con原创 2018-01-23 21:04:39 · 363 阅读 · 0 评论 -
[插头DP] BZOJ 2331: [SCOI2011]地板
SolutionSolution好菜啊。。第一次写插头DP。。。 这个LL型砖块具有特征的就是在之前DP的状态有没有拐过弯。 用00表示没有插头,11表示未拐弯的插头,22表示已拐弯的插头。 大力分类讨论。 然后这种题打的时候专注一点吧。。 刚开始暴力map,T掉了。。还是得用Hash表。#include using namespace std;const int原创 2018-01-05 09:25:43 · 391 阅读 · 0 评论 -
[容斥原理][DP] SRM 498 Div1 Hard FoxJumping
SolutionSolution对不能走(+ai,+ai)(+a_i,+a_i)容斥,设dpp,qdp_{p,q}表示走了pp步不合法的,和为10q10q的方案数。 同时DP出x,yx,y两个方向上走了pp步,长度为qq的方案数xp,q,yp,qx_{p,q},y_{p,q}。因为此时x,yx,y独立,最后计算的时候直接乘起来就好了。 那最后答案就是∑p=0R∑q=0⌊min(m,n)10⌋(−原创 2018-01-03 17:17:50 · 445 阅读 · 0 评论 -
[最短路][DP][传递闭包] BZOJ 5109 && LOJ #6252. 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!
SolutionSolution记fuf_u表示从SS到TT经过点uu的方案数。 这可以很简单的DP出来。 那么点对(A,B)(A,B)合法当且仅当fA+fB=fTf_A+f_B=f_TAA,BB无法互相到达。第一个用个表存,第二个按拓扑序做传递闭包就好了。 原来图会不连通 时间复杂度O(nlogn+nmw)O(n\log n+{nm\over w})#include <bits/st原创 2017-12-27 13:31:42 · 1138 阅读 · 0 评论 -
[状压DP][概率与期望][二分图] BZOJ 5006 && LOJ #2290. 「THUWC 2017」随机二分图
SolutionSolution好神的做法。 如果只有type=0type=0的话,直接状压DP就好了。 fS,Tf_{S,T}表示左边集合为SS,右边匹配的集合为TT的完备匹配的数量的期望。 而后面两种可以这么考虑把一组边拆掉。 type=1type=1的话拆成两条50%50\%可能出现的边和一组25%25\%同时出现的边(若重点是不可能同时选的)。 这样的话同时出现的概率为50%×50原创 2017-12-26 19:37:56 · 906 阅读 · 0 评论 -
[DP][容斥原理] ARC064 F - Rotated Palindromes
SolutionSolutionSolution要求的就是长度为 nnn 的可通过循环位移得到回文串的串的本质不同的个数。 我们考虑枚举长度为 x(x|n)x(x|n)x(x|n) 的回文串作为其最小循环节来计数。 可以发现回文串的循环节也是循环的。那长度为 xxx 的循环节为 k⌈x2⌉k⌈x2⌉k^{\lceil{x\over2}\rceil} 种。 但这样求出来的并不是作为最小循环...原创 2018-03-08 13:39:30 · 386 阅读 · 0 评论 -
[DP][堆与斜率] ARC070 E - NarrowRectangles
SolutionSolutionSolution先看这个部分分。显然是个暴力DP。 设dpi,xdpi,xdp_{i,x}表示考虑了前iii个矩形,第iii个左端点在xxx的最优解。 转移就是dpi,x=MINx−(ri−1−li−1)≤y≤x+(ri−li)dpi−1,y+|x−li|dpi,x=MINx−(ri−1−li−1)≤y≤x+(ri−li)dpi−1,y+|x−li|dp_{...原创 2018-02-22 16:06:03 · 670 阅读 · 0 评论 -
[多项式ln][多项式exp][背包DP][生成函数] LOJ #556. 咱们去烧菜吧
SolutionSolutionSolution就是个背包DP咯。 答案长这个样子ans=[xn]∏i=1m1−xaibi+ai1−xaians=[xn]∏i=1m1−xaibi+ai1−xaians=[x^n]\prod_{i=1}^m{1 - x^{a_ib_i+a_i}\over 1-x^{a_i}}考虑取个lnln\lnlnans=∑i=1m(ln(1−xaibi+ai)−ln(1−...原创 2018-03-06 14:45:00 · 880 阅读 · 0 评论 -
[多项式ln][多项式exp][多项式求幂][生成函数][DP][FNT] BZOJ 3684: 大朋友和多叉树
SolutionSolutionSolution把DP写成生成函数的形式。f(x)=x+∑d∈Dfd(x)f(x)=x+∑d∈Dfd(x)f(x)=x+\sum_{d\in D}f^d(x)设g(f(x))=xg(f(x))=xg\big(f(x)\big)=x,有g(f(x))g(x)==f(x)−∑d∈Dfd(x)x−∑d∈Dxdg(f(x))=f(x)−∑d∈Dfd(x)g(x)=x−∑...原创 2018-03-06 13:00:59 · 806 阅读 · 0 评论 -
[NTT][DP][树链剖分][分治] LOJ #6289. 花朵
SolutionSolutionSolutionfu,0/1,ifu,0/1,if_{u,0/1,i}表示uuu子树中选了iii个点,uuu选不选的答案。 转移显然就是一个卷积的形式。 考虑重链剖分。 先把轻儿子卷到根,这样只需要考虑重链。 再考虑重链上的DP。 考虑头尾选不选gu,0/1,0/1gu,0/1,0/1g_{u,0/1,0/1}。这也是个卷积,可以分治+FFT。#i...原创 2018-03-05 16:48:57 · 883 阅读 · 0 评论 -
[DP] SRM 452 Div1 Hard IncreasingNumber
SolutionSolutionSolution刚开始自己脑补了一个O((123)m2logn)O((123)m2logn)\mathcal{O}\big({12\choose3}m^2\log{n}\big)的做法。。大概就是dpi,lo,hi,jdpi,lo,hi,jdp_{i,lo,hi,j}表示考虑iii位,以lololo开头以hihihi结尾,模mmm为jjj的方案数。然后倍增DP...原创 2018-02-26 08:22:27 · 271 阅读 · 0 评论 -
[单调队列][决策单调性DP] BZOJ 2216: [Poi2011]Lightning Conductor
SolutionSolutionSolution考虑 j≤ij≤ij\le i 和 j>ij>ij\gt i 。 ansi=max{aj+|i−j|−−−−−√−ai}ansi=max{aj+|i−j|−ai}ans_i=\text{max}\{a_j+\sqrt{|i-j|}-a_i\} 有决策单调性,单调队列。#include <bits/stdc++.h&g...原创 2018-03-12 13:25:37 · 322 阅读 · 0 评论 -
[DP] 51Nod 1301 集合异或和
SolutionSolutionSolution感觉是挺有趣的一道题qwq 枚举AAA和BBB从高到底第一个不同的位kkk。 A<BA<BA\lt B可以转化成A xor B∈[2k,2k+1]A xor B∈[2k,2k+1]A~xor~B\in[2^k, 2^{k+1}],且B or 2k=BB or&n...原创 2018-02-25 17:22:50 · 334 阅读 · 0 评论 -
[FNT][DP][矩阵] Codeforces 947 E - Perpetual Subtraction
SolutionSolutionSolution暴力DP很简单fi,j=∑k≥jfi−1,kkfi,j=∑k≥jfi−1,kkf_{i,j}=\sum_{k\ge j}{f_{i-1,k}\over k} 因为转移形式都一样,可以写出转移矩阵。A=⎡⎣⎢⎢⎢⎢⎢⎢1n+10⋮01n+11n⋮0⋯⋯⋱⋯1n+11n⋮1⎤⎦⎥⎥⎥⎥⎥⎥A=[1n+11n+1⋯1n+101n⋯1n⋮⋮⋱⋮00⋯1...原创 2018-03-12 07:34:31 · 1117 阅读 · 1 评论 -
[DP][容斥原理] 2017 TCC India Online Div1 Hard ConsecutivePalindromes
SolutionSolutionSolution考虑其反面,就是不存在一个子序列是回文串。 实际上需要考虑的只有连续的两个和三个字符。因为其他情况都已经包含在这个之中。 设dpi,l,0/1,0/1,0/1dpi,l,0/1,0/1,0/1dp_{i,l,0/1,0/1,0/1}表示考虑到iii,长度为lll,i,i−1,i−2i,i−1,i−2i,i-1,i-2是否选取的状态为0/10/...原创 2018-03-11 16:16:27 · 281 阅读 · 0 评论 -
[回文自动机][DP] Codeforces gym 100543 G - Virus synthesis
SolutionSolutionSolution考虑在回文自动机上DP fufuf_u表示回文自动机中uuu节点所代表的回文串最少需要几次才能得到lenulenulen_u为奇数,fu=lenufu=lenuf_u=len_u。lenulenulen_u为偶数,fu=min(fp+1,fhalfu+(lenu2−lenhalfu)+1)fu=min(fp+1,fhalfu+(lenu...原创 2018-03-11 15:19:40 · 308 阅读 · 0 评论 -
[DP][CDQ分治] BZOJ 4553: [Tjoi2016&Heoi2016]序列
SolutionSolutionSolution设位置iii最大可变成ririr_i,最小lilil_i。 fifif_i为iii位置的答案。容易得到fi=max{fj+1|j<i,rj≤ai,aj≤li}fi=max{fj+1|j<i,rj≤ai,aj≤li}f_i=\text{max}\{f_j+1|j\lt i, r_j\le a_i,a_j\le l_i\}把(rj,aj...原创 2018-03-03 13:52:07 · 303 阅读 · 0 评论 -
[背包DP] UOJ #181. 【UR #12】密码锁
SolutionSolutionSolution因为这是一张竞赛图,所以把强连通分量缩起来以后回事一条链的情况。 那么强连通分量的数量就是相当于缩起来以后的点的数量。 对于图 G(V,E)G(V,E)G(V, E) 来说,这样的点集 S⊆VS⊆VS \subseteq V ,满足两个点集的边是这样的关系 e∈E^={(u,v)|u∈S,v∈V−S}e∈E^={(u,v)|u∈S,v∈V−S...原创 2018-03-16 13:54:02 · 628 阅读 · 0 评论 -
[不平等博弈][DP] TCO 2017 Final Div1 Medium GameOfTokens
SolutionSolutionSolution先考虑已知模板串的情况。 如果出现ABB这样A的个数比B的个数少的,那么A是不可能会向左走的。 整个模板串就会因为这个分隔开成若干个独立游戏。 我们要计算每个游戏的值的和。 维护两个变量ansansans和curcurcur分别表示A能比B多走ansansans步,当前游戏A的个数比B的个数多几个。 显然的有以下三个转移:patt...原创 2018-02-22 23:05:59 · 357 阅读 · 0 评论 -
[DP][容斥原理][斯特林数] Codeforces715 E - Complete the Permutations
SolutionSolutionSolution先dfsdfs\text{dfs}出四个量c1,c2,cyc,blkc1,c2,cyc,blkc1,c2,cyc,blk表示缩边以后x→ 0x→ 0x\rightarrow~0,0→x0→x0\rightarrow x,自环和0→00→00\rightarrow0的边的数量。 fifif_i表示用c1c1c1可以搞出至少ii...原创 2018-03-09 15:34:53 · 962 阅读 · 0 评论 -
[DP of DP]SRM 591 Hard StringPath
DescriptionDescription给定nn和mm,求所有n×mn\times m的字符矩阵中有多少存在两条从(0,0)(0,0)开始的只能往下往右走的路径,使得这两条路径组成的字符串正好是AA和BB。SolutionSolution考虑模型DP。 设fi,jf_{i,j}表示到ii行jj列是否存在一条路径是AA的前缀。 设gi,jg_{i,j}表示到ii行jj列是否存在一条路径是BB的原创 2017-10-30 07:41:14 · 501 阅读 · 0 评论 -
[DP][拉格朗日插值][生成函数] SRM 629 Div1 Hard CandyDrawing
SolutionSolution题目的意思就是要求[xk]∏i=0n(ix+1)[x^k]\prod_{i=0}^n(ix+1) 设fn,k=[xk]∏ni=0(ix+1)f_{n,k}=[x^k]\prod_{i=0}^n(ix+1),则有fn,kfn,k−fn−1,k==fn−1,k+nfn−1,k−1nfn−1,k−1\begin{eqnarray}f_{n,k}&=&f_{n-1,k}+n原创 2017-12-30 15:22:58 · 401 阅读 · 0 评论 -
Codeforces 830D [DP]
SolutionSolution考虑这样DP:dpi,jdp_{i,j}表示i−housei-house中有jj条路径的方案数。 答案就是dpn,1dp_{n,1}。 考虑从dpi−1,jdp_{i-1,j}和dpi−1,kdp_{i-1,k}转移到的状态。若不选取根,dpi,j+k+=dpi−1,j∗dpi−1,kdp_{i,j+k}+=dp_{i-1,j}*dp_{i-1,k}。若选取根原创 2017-09-23 18:21:56 · 571 阅读 · 0 评论 -
Codeforces 722E [DP]
SolutionSolution以前做过一道题是这样的给定n∗mn * m的网格图和kk个点,求不定过某些点从(1,1)(1,1)走到(n,m)(n,m)的方案数。这个的话直接O(k2)O(k^2)DP就好了。 这道题也差不多,因为电池的衰减只有O(log2s)O(log_2s)种,所以DP时记录一下当前经过的点的个数就好了。#include <cstdio>#include <cstdli原创 2017-09-23 12:58:29 · 394 阅读 · 0 评论 -
Codeforces 856C [DP]
DescriptionDescription给定nn个数,求将这nn个数按一定顺序拼在一起是1111的倍数的方案数。SolutionSolution1111的倍数的奇数位之和与偶数位之和之差为1111的倍数。 把每个数记为奇数位之和与偶数位之和之差,那么如果他的第一位是奇数位,就相当于加上这个数,否则就是减掉这个数。 先考虑长度为奇数的数,可以O(n2)O(n^2)DP出有ii个数第一位是奇数位原创 2017-09-21 20:14:02 · 615 阅读 · 0 评论 -
Codeforces 840C [DP]
DescriptionDescription给定nn个数,求nn个数所成的排列中不存在ai×ai+1a_i\times a_{i+1}为完全平方数的方案数。n≤300n \le 300SolutionSolution首先先把每个数的平方因子全部去掉,就形成了vnvn个等价类,每个大小为viv_i,那么只要计算出这些等价类内不考虑顺序的答案ansans,最后答案就是ans∏vni=1vi!ans\pr原创 2017-08-21 21:23:08 · 1028 阅读 · 0 评论 -
BZOj 1911 [斜率优化][DP]
1911: [Apio2010]特别行动队 Description Input Output 首先能够很简单的得到DP方程: dp[i] = min(dp[j] + Func(sum[i] - sum[j]))设有 j, k 满足 j < k 且决策 j 比 k 更优,就相当于:dp[j] - dp[k] + a * sqr(sum[j]) -原创 2016-07-07 15:30:43 · 667 阅读 · 0 评论 -
[DP][容斥原理] BZOJ 4762: 最小集合
DescriptionDescription定义一个非空集合是合法的,当且仅当它满足以下两个条件。1、集合内所有元素andand和为00。2、它的非空子集中仅有它本身满足11。给出一个集合SS,求它的合法非空子集数。 n≤1000,ai≤1024n\le1000,a_i\le1024SolutionSolution设f(S)=⋀a∈Saf(S)=\bigwedge_{a\in S}aSaS_原创 2017-09-29 12:15:59 · 745 阅读 · 0 评论 -
Codeforces 809D [平衡树][动态规划]
DescriptionDescription大概是求类似于给定区间的最长上升子序列SolutionSolutiongjghfd大神教我用平衡树维护,其实每次加入一个区间只会对LISLIS的DPDP数组的一段区间有影响。影响就是右移加一,好像用TreapTreap搞搞就好了。#include <cstdio>#include <cstring>#include <iostream>#includ原创 2017-05-27 17:56:56 · 829 阅读 · 0 评论 -
BZOJ 3590 [双连通分量][状压DP]
DescriptionDescription求一个包含所有节点的边双联通分量,并是边权和最小。n≤12n \le 12SolutionSolution注意到任意的一个边双连通分量都是由一条链和一个子双连通分量构成的,而且题中节点数n≤12n\le 12。考虑状压DP。令fSf_S表示点集为SS的双联通分量的权值的最小值。令hS,u,0/1h_{S, u, 0/1}表示边(u,v)(v∈S)(u,v)原创 2017-07-31 19:14:17 · 485 阅读 · 0 评论