dp
DOFYPXY
这个作者很懒,什么都没留下…
展开
-
[联合集训6-26] 树上染色 决策单调性
我们设cost(y,x)cost(y,x)cost(y,x)表示从yyy刷到xxx的代价,设du=h−depth(u),du=h−depth(u),d_u=h-depth(u),。 cost(y,x)=Cy⋅(dx(dx+1)2−dy(dy−1)2)+C2y⋅(dx−dy+1)−Hycost(y,x)=Cy⋅(dx(dx+1)2−dy(dy−1)2)+Cy2⋅(dx−dy+1)−Hycost(y...原创 2018-07-02 21:17:27 · 479 阅读 · 0 评论 -
[BZOJ4455][ZJOI2016]小星星 容斥原理+树型DP
先考虑一个错误的DP,fi,jf_{i,j}表示子树ii中,ii映射到jj的方案数,这样可能一个点被重复映射。 我们考虑多一维状态fi,j,Sf_{i,j,S}表示映射点集至多为SS的方案,枚举SS来DP,用朴素的容斥原理来求出正确答案即可。 代码:#include#include#include#define ll long longusing namespace std;原创 2018-01-20 19:51:47 · 889 阅读 · 0 评论 -
[LOJ2325][清华集训 2017]小Y和恐怖的奴隶主 矩阵乘法+奇技淫巧
首先发现状态之和每种体力值的奴隶主个数有关,计算一下发现状态数最多165,于是搞出转移矩阵,设fi,Sf_{i,S}表示i轮时状态为SS,之后的期望,numnum为奴隶主个数+1+1,转移就是fi,S=1num+∑s′→sfi+1,Sf_{i,S}=\frac{1}{num}+\sum_{s' \to s}f_{i+1,S}然后O(T1653logn)O(T165^3\log n)矩阵快速幂,不过原创 2018-01-18 20:34:15 · 1324 阅读 · 0 评论 -
[ARC086]F - Shift and Decrement 位运算+数论+DP
题面 可以证明,在最后一次÷2÷2操作之前,不必要进行连续的两次−1-1操作。因为连续的−1-1操作可以通过先÷2÷2来减少操作次数。 我们定义popcount(x)popcount(x)来表示xx二进制表示中11的个数,那么假设做了kk次÷2÷2操作(可以发现kk不会超过6060),那么可以把所有操作等价为: 1. −p-p (p2k)(p,耗费popcount(p)popcount(p原创 2017-12-17 12:43:49 · 682 阅读 · 0 评论 -
[2018雅礼集训1-12]小C的线段树 DP
题面 考虑当n>mn>m时答案为00,1≤nm≤1051\le nm \le 10^5,所以只用考虑n1052n的情况。 把一个区间看成一对括号,设fi,l,rf_{i,l,r}表示前ii个点,之前有ll个左括号,rr个右括号,gi,l,rg_{i,l,r}表示其方案数,那么一个点的贡献就是(l−r)k(l-r)^k,然后分这个点不放、放左括号、放右括号、放两个括号转移即可。复杂度O(n2m)原创 2018-01-17 22:14:21 · 843 阅读 · 0 评论 -
[2018雅礼集训1-8]送你一堆区间 线段树优化DP
题面 其实做着题有点受海明距离那题启发,状态都设计的差不多。 给关键点离散化后,把每个区间重新定位,并把左端点按从小到大排序。设fi,jf_{i,j}表示只考虑前ii个区间,前jj个关键点都覆盖到了,假设第ii个区间为[li,ri][l_i,r_i]那么有转移: fi,j=fi−1,jf_{i,j}=f_{i-1,j} fi,ri+=∑li−1≤k≤rifi−1,kf_{i,r_i}+=\原创 2018-01-08 22:27:28 · 984 阅读 · 0 评论 -
[BZOJ4008][HNOI2015]亚瑟王 期望DP
记住,期望要倒着推。。。 考虑按一轮一轮DP,不免要记录之前轮发动了那些卡牌,这样就gg了。 所以考虑每一张卡牌的贡献,我们就只需要关心还剩多少轮没有发动卡牌,设fi,j" role="presentation" style="position: relative;">fi,jfi,jf_{i,j}表示当前考虑第i" role="presentation" style="position: r原创 2018-01-24 22:02:33 · 465 阅读 · 0 评论 -
[2018雅礼集训1-23]盛大的庆典 状压DP
题面 考虑把每一对点的路径放到其lca上考虑,为叙述方便,记sonx" role="presentation" style="position: relative;">sonxsonxson_x为当前点儿子中子树包含x" role="presentation" style="position: relative;">xxx的那一个。设fi,S" role="presentation" style原创 2018-01-24 20:51:55 · 413 阅读 · 0 评论 -
[BZOJ2159]Crash的文明世界 树型DP+第二类Striling数
听说形如xkx^k的都是Stirling数的套路?我怎么没听说过啊。。。 有个性质:xk=∑i=1kS(k,i)∗i!∗(xi)x^k=\sum_{i=1}^k S(k,i)*i!*{x\choose i} 考虑一个组合意义证明,就是给kk个格子染xx种色的方案数,等于先把这kk个格子分成若干集合,在选出相同个数的颜色,每个集合染同一种颜色的方案数。i!∗(xi)i!*{x\choose i}原创 2018-01-07 22:16:29 · 527 阅读 · 0 评论 -
[LOJ2273][JXOI2017]数列 DP
不难发现一个性质,若对于Ai−1A_{i-1}的限制是Li−1≤Ai−1≤Ri−1L_{i-1}\le A_{i-1}\le R_{i-1},对于AiA_i的限制是Li≤Ai≤RiL_i\le A_i\le R_i ,那么有Li−1≤LiL_{i-1}\le L_i,Ri−1≥RiR_{i-1}\ge R_i,于是我们考虑DP。 设fi,x,l,rf_{i,x,l,r}表示填了ii个数,AiA_原创 2018-01-23 21:41:38 · 1227 阅读 · 1 评论 -
[BZOJ4182]Shopping 点分治+dfs序+多重背包单调队列
题目的限制就是买的点必须是一个联通块。 考虑先枚举一个点必选,那么就是一个有依赖的多重背包(就是选了子树根才能选子树中的点),用一下树型背包的套路:先搞出dfs序,设fi,jf_{i,j}表示考虑了dfs序后ii个点,花了jj的钱的答案,如果不选就跳过整棵子树的区间,如果选就从i+1i+1转移过来即可。 考虑把这个枚举变成点分治就可以了,复杂度O(mnlogn)O(mn\log n)。 代码原创 2018-01-04 22:05:32 · 840 阅读 · 2 评论 -
[2018雅礼集训1-4]字符串 AC自动机+状压DP
题面 其实我的写法有些复杂。。。 考虑一个反对称串TT前mm位确定,后mm位也唯一确定了,就是翻转之后再01取反。所以给定的一个串要在TT中出现过,要么是前半部分的子串,要么是后半部分的子串(等价于翻转之后再01取反后是前半部分的子串),要么经过中间。 先考虑前两种情况,想到建出AC自动机再状压DP,我们从第mm位往前DP,AC自动机上要建出每个给定串ss的翻转串和01取反串,并打上该串的标原创 2018-01-04 21:34:08 · 453 阅读 · 0 评论 -
[BZOJ4380][POI2015] Myjnie 区间DP
首先有一个显然的结论,一定存在一组答案使得每家店的价格都是某个cic_i,因为把某个答案替换成第一个大于等于它的cic_i不会更劣。 离散化cc之后,设计状态fl,r,kf_{l,r,k}表示考虑所有[ai,bi]⊆[l,r][a_i,b_i]\subseteq[l,r]的客户,[l,r][l,r]中最小价格为kk的最大收益。设gl,r,k=max{fl,r,≥k}g_{l,r,k}=max\{f原创 2018-01-01 23:08:15 · 380 阅读 · 0 评论 -
[ARC085]F - NRE RMQ优化DP
题面 我们先假设a全部填了1,那么海明距离就是b中0的个数。 那么假设a中有一个ai=0,若bi=0,那么海明距离-1,否则海明距离+1。 于是可以设计状态f[i][j]表示[i+1,j]全为1时,1~i中海明距离的最小值;如果把所有询问按l升序,r降序排序,就可以转移了。 f[i][j]<-f[i-1][j]; 若i=l,j=r,还有f[i][j]<-min{f[i-1][k]} i-1原创 2017-12-05 09:12:48 · 872 阅读 · 1 评论 -
[BZOJ3530][SDOI2014]数数 AC自动机+数位DP
考虑先建出集合S的AC自动机,并把它补成Trie图(是叫这个吗?),并在AC自动机标记上S集合中每个数字的结束位置。把这个标记沿fail树下传之后,一个串只要在AC自动机上没有走到标记点,就说明它是幸运数. 所以考虑数位DP,设f[i][j][0/1]f[i][j][0/1]表示从高往低填到第ii位,跑到AC自动机上jj点,前ii位<N<N还是=N=N。转移即可。 考虑到不能有前导零,所以填每一原创 2017-12-31 10:59:31 · 302 阅读 · 0 评论 -
[ARC086]E - Smuggling Marbles 树型DP
题面 首先可以发现以0为根时,层与层之间时独立的,于是就有了一种O(n^2)的做法:对每一层DP一次,设f[d][i][0/1]表示当前考虑第d层的贡献,i的子树中贡献0/1的方案数。那么最后我们得到很多f[][0][0/1],然后问题就变成从每个f[d][0][0/1]只能选其一,选中的数相乘并乘上选的f[][0][1]的个数再求总和,随便计数一下就好。 接着我们考虑怎么把这么所有层放在一起D原创 2017-12-14 11:37:26 · 599 阅读 · 0 评论 -
[BZOJ3622]已经没有什么好害怕的了 二项式反演
恰好kk组不好求,先求至少kk组,设恰好kk组方案数为GkG_k,至少为FkF_k。 首先把aa,bb都排序,然后求出tit_i表示aia_i比bb中多少个数大。设fi,jf_{i,j}为考虑a1..ia_{1..i}中选出jj个比bb大的组的方案数,有转移: fi,j=fi−1,j+fi−1,j−1∗(ti−j+1)f_{i,j}=f_{i-1,j}+f_{i-1,j-1}*(t_i-j+1原创 2018-01-20 20:03:15 · 832 阅读 · 0 评论 -
[HDU4624]Endless Spin 最值反演+DP
首先最值反演(也有人叫min-max容斥)就是: max{S}=∑T⊆S(−1)|T|+1min{T}\max\{S\}=\sum_{T\subseteq S}(-1)^{|T|+1}\min\{T\} 假设位置ii被染黑的时间是XiX_i,那么要求的就是E[max{Xi}]E[\max\{X_i\}],于是转化为对于所有点集SS,求E[mini∈S{Xi}]E[\min_{i\in S}\{原创 2018-01-20 20:14:09 · 1529 阅读 · 0 评论 -
[BZOJ3512]DZY Loves Math IV 杜教筛+记忆化搜索
发现nnn只有=105=105=10^5,我们先考虑S(n,m)=∑mi=1φ(ni)S(n,m)=∑i=1mφ(ni)S(n,m)=\sum_{i=1}^m \varphi(ni)怎么求。 先把nnn分成两部分,n1=∏pin1=∏pin_1=\prod p_i,即所有质因子一次幂的乘积,n2=∏pci−1in2=∏pici−1n_2=\prod p_i^{c_i-1},即剩下的。不难发现φ(...原创 2018-02-19 12:22:01 · 403 阅读 · 0 评论 -
[JZOJ5749] 小J真爱粉交流群 博弈
首先不难发现: B只会在A所在位置下面选择建墙或者不建; 如果选择不建A一定会向下走。 那么就可以推导出B在某一行建的墙一定是A移动的区间。 那么我们设fi,l,rfi,l,rf_{i,l,r}表示B在第iii行的[l,r][l,r][l,r]下有墙,A在l−1l−1l-1时的分数,gi,l,rgi,l,rg_{i,l,r}则表示A在r+1r+1r+1的分数。 两者转移类似,我们考虑ff...原创 2018-06-01 18:24:52 · 449 阅读 · 0 评论 -
[联合集训6-12] Mirror 状压DP
因为光路是可逆的,不闭合的光路都会被算进答案,所以可以把问题转化为最大化闭合光路长度,答案就是4nm4nm4nm减掉其两倍。 首先考虑如果两个闭合光路共用一个镜子,那么把这个镜子拿走答案不变,所以存在一种最优方案使得每行每列的镜子都是偶数个,而且一定是相邻两个配对。于是状压每一行镜子的奇偶性, 并记录当前镜子数量,一列一列填镜子即可。 因为镜子数量最多为2(n+m−2)2(n+m−2)2(n+...原创 2018-06-14 22:08:17 · 295 阅读 · 0 评论 -
[联合集训6-21] LiaPo 矩阵快速幂
奇数的很显然是(m−1)n−(−1)n(m−1)(m−1)n−(−1)n(m−1)(m-1)^n-(-1)^n(m-1)。 对于偶数的情况,假设先不考虑对称不同的限制,我们可以DP的时候只需要关心当前为是否与第一位相同。那么考虑到对称不同的限制,我们可以两个两个填(也就是iii与i+n2i+n2i+\frac{n}{2}一起填),那么我们只要关心当前的两个位置和1,n2+11,n2+11,\fr...原创 2018-06-21 21:54:34 · 347 阅读 · 0 评论 -
[联合集训6-19] 山洞 点分树
一句话题意就是求点分树最小深度。 点分树有一个性质:我们称点iii在点分树上距叶子的距离为其权值wiwiw_i,那么对于两个点u,vu,vu,v满足wu=wv=kwu=wv=kw_u=w_v=k,在原树路径(u,v)(u,v)(u,v)上一定存在点ttt使得wt&amp;gt;kwt&amp;gt;kw_t&gt;k,证明很显然。 我们对每个点iii求出一个二进制状态,二进制第kkk位表示该点子树中存不存在一个wj...原创 2018-06-21 21:27:39 · 396 阅读 · 0 评论 -
[联合集训6-18]不同班级 容斥+分治NTT
我们设f(x)f(x)f(x)是至少有xxx个人与本班人匹配的方案数,那么根据容斥就有Ans=∑mi=0(−1)if(i)(n−i)!Ans=∑i=0m(−1)if(i)(n−i)!Ans=\sum_{i=0}^m (-1)^if(i)(n-i)! ai=bi=1ai=bi=1a_i=b_i=1的时候是经典的错排问题,f(x)=(nx)f(x)=(nx)f(x)={n\choose x}。 对...原创 2018-06-20 21:05:29 · 339 阅读 · 0 评论 -
[联合集训6-15]相互再归的鹅妈妈 数位DP+斯特林反演
问题要求无序方案数,可以转化成求有序方案数再除以n!n!n!即可。 先考虑去掉互不相同的限制,最后用斯特林数容斥掉即可。 可以发现从高往低扫,假如出现RRR有一位是111,而且有一个数这位填了000,那么剩下的数就可以再RRR的范围内随便填,因为最后都可以通过这个数把异或和调成000。于是我们可以通过枚举是哪一位最初发生了这种情况,求出g(i)g(i)g(i)表示选出iii个数异或和为000的...原创 2018-06-20 19:41:32 · 1173 阅读 · 0 评论 -
[JZOJ5728] 简单计数|| 容斥+处理环上问题
先考虑链上的做法。 先预处理fi,jfi,jf_{i,j}表示iii个元素分到jjj个集合中,所有集合大小之积的和,fi,j=k⋅fi−k,j−1fi,j=k⋅fi−k,j−1f_{i,j}=k\cdot f_{i-k,j-1}。 那么假如第iii种数字的cicic_i个被分成了aiaia_i个,那么问题就转化成有nnn种颜色的球,第iii种球有aiaia_i个,求排列这些球使得相邻球不同色的...原创 2018-05-24 11:47:24 · 460 阅读 · 0 评论 -
[BZOJ5333][SDOI2018]荣誉称号 树型DP
首先发现最终的aiaia_i一定和a⌊i2k+1⌋a⌊i2k+1⌋a_{\lfloor\frac{i}{2^{k+1}}\rfloor}同余。 那么只要把第k+1k+1k+1层及其之后的代价统计进前kkk层即可,也就是预处理出vi,jvi,jv_{i,j}表示前kkk层中的aiaia_i在模mmm调整至jjj的代价。 然后只要设fi,jfi,jf_{i,j}表示点iii到第kkk层的路径上aa...原创 2018-05-24 10:37:00 · 428 阅读 · 0 评论 -
[JZOJ5739]毒奶 子集DP
这里讲的是O(3n⋅n)O(3n⋅n)O(3^n\cdot n)的可以过的暴力,正解不会。。。 把问题转化成给了nnn个白点,nnn个黑点,给定了n−1n−1n-1条白白边和黑黑边,求再填nnn条黑白边使之联通的方案数。 先用给定的边缩点,记下缩点后每个大点的sizesizesize,然后随意钦定一个白点当根,剩下就是要求一层黑一层白的填,直接子集DP即可。 具体地,设FS,c,iFS,c,...原创 2018-05-24 09:44:45 · 497 阅读 · 0 评论 -
[CTSC2018]假面 01背包的删除
首先记录ai,jai,ja_{i,j}表示单位iii生命值为jjj的概率,那么每次修改可以O(m)O(m)O(m)。 对于询问,先求出exi=∑mij=1ai,jexi=∑j=1miai,jex_{i}=\sum_{j=1}^{m_i} a_{i,j}表示单位iii存活的概率。那么我们只要对于每一个单位iii,求出除了该单位的剩下k−1k−1k-1个单位中,有1..k−11..k−11..k-1...原创 2018-05-16 11:29:38 · 719 阅读 · 0 评论 -
[AGC024] E - Sequence Growing Hard 树型DP
把问题看成每次向序列中添加一个[1,K][1,K][1,K]的数,假设我们要填的数是xxx,因为要保证字典序变大,那么所填的位置往后的第一个非xxx数必须&lt;x&lt;xxxx中的任意位置再填一个xxx都是等价的,所以等同于只能在一个&lt;x&lt;xxxx。 那我们把填一个数看成一个二元组(t,w)(t,w)(t,w),表示在第ttt次填了数www,假设把这个www填的位置后面的那个&l...原创 2018-05-21 09:16:16 · 777 阅读 · 0 评论 -
[JXOI2018]守卫 区间DP
题面 设fl,rfl,rf_{l,r}表示[l,r][l,r][l,r]的答案。 先考虑f1,nf1,nf_{1,n},那么nnn上必须放一个保镖,假设不能被nnn看到的是很多个区间[lk,rk][lk,rk][l_k,r_k],不难发现一个性质:[rk+2,n][rk+2,n][r_k+2,n]的任一位置是看不到[lk,rk][lk,rk][l_k,r_k]的任一位置的。所以rk,rk+1r...原创 2018-05-04 16:24:51 · 536 阅读 · 0 评论 -
[BZOJ4919]大根堆 启发式合并+线段树/multiset
先考虑O(n2)O(n2)O(n^2)的DP,设fi,jfi,jf_{i,j}表示考虑子树iii中,选的vvv的最大值≤j≤j\le j时最多能选多少个点,那么考虑一个点的转移。 先合并儿子:fi,j=∑x∈sonifx,jfi,j=∑x∈sonifx,jf_{i,j}=\sum_{x\in son_i} f_{x,j} 在选上他自己:chkmax(fi,≥vi,fi,vi−1+1)chkma...原创 2018-03-28 21:42:50 · 504 阅读 · 0 评论 -
[2018雅礼3-25]arg dp套dp
考虑求LIS的算法,我们有一个数组didi表示上升子序列长度为ii时最后一项的最小值,然后每加入一个值xx,就替换掉dd中第一个≥x≥x的值。于是我们可以用一个三进制状态表示这个dp(00表示还未选,11表示选了且在dd中,22表示选了但不在dd中),转移即可。 复杂度O(3n∗nlogn)O(3n∗nlogn),实测把loewr_bound改成暴力扫的O(3n∗n2)O(3n∗n2)更快。。...原创 2018-03-28 21:25:52 · 309 阅读 · 0 评论 -
[2018雅礼省选集训3-31]Max 期望DP
注意到mmm比较小,不妨状压mmm。 我们设fi,j,Sfi,j,Sf_{i,j,S}表示AiAiA_i用掉集合SSS中的操作后值为jjj的概率。 再设gi,j,Sgi,j,Sg_{i,j,S}表示A1..iA1..iA_{1..i}用掉集合SSS中的操作后最大值为jjj的概率,枚举AiAiA_i使用的操作集合转移即可。 复杂度O(nc2m23m)O(nc2m23m)O(nc^2m^23^m...原创 2018-04-15 19:53:12 · 321 阅读 · 0 评论 -
[2017纪中11-5]好路线 DP
方差好像之和平方和以及和的平方有关。 化式子得到(n+m-1)*平方和-和的平方。 因为和的值域很小,于是f[i][j][k]表示走到(i,j)和为k是最小的平方和,直接DP即可。 代码:#include<iostream>#include<cstdio>#include<cstring>#define chkmin(a,b) a=min(a,b)#define R(a) (a)*(a原创 2017-11-05 21:27:24 · 307 阅读 · 0 评论 -
[2017纪中11-4][ARC071]F-neutral DP
题面 首先考虑假如填了连续的两个数a,b均>=2,那么后面的数一定全是b。先暂时不考虑这种情况。 考虑假如填了一个>=2的数a,那么后面a个数都必须填1,之后才能自由填,于是设计状态f[i]表示从i开始可以自由填的方案数。那么假设上一个自由填>=2的数是d,那么f[i]+=f[i-d-1],假如上一个自由填的是1,f[i]+=f[i-1],总之不能转移i-2就是了。 但考虑到有一些>=2的a使原创 2017-11-05 21:12:28 · 631 阅读 · 0 评论 -
[2017纪中11-3]机房比教室好多了 博弈+树型DP
题面 先考虑出发点在x,先手玩以x为根这棵子树的答案。 首先不难证明,a[x]变大,不会变得更劣。 那我们考虑先手拿完一个石头后走向一个a[son]>=a[x]的儿子,这样肯定是不明智的,因为假如对手把你推回x,你当然不能和他一直这样推来推去(你肯定先死),所以你会选择去别的儿子,但这当然不如一开始就去别的儿子(因为a[x]更大)。 再考虑先手拿完一个石头后走向一个a[son]#includ原创 2017-11-03 21:31:12 · 373 阅读 · 0 评论 -
[BZOJ4576]262144 分治/区间DP
只有我是鬼畜的分治做法吗。。。先形象的理解,假如某一个很小的数孤零零的在那里,它阻断了左右两边的合并,导致问题可以被分治解决考虑从小的数字往大的数字合并,若有一2*k长度的相同数字块,我们可以直接将数字加一而长度变为k,若有一2*k+1长度的,则必定会阻断左右,则要分合并后的k个分给左边和右边两种情况讨论。solve(l,r,b)表示把l到r的中的b元素全部合并所能的到的最大值。用双向链表维护上述数原创 2017-10-21 07:22:58 · 373 阅读 · 0 评论 -
[BZOJ1799][AHOI2009]同类分布 数位DP+记忆化搜索
考虑枚举数位之和m。对于每个m,问题简化为有多少个数数位之和==m,且%m=0。设计状态f[v][s][r][0/1]表示从高到低填到第v位,当前和为s,%m=r,未填满/填满的方案数。 TLE的DP,初始状态为f[19][0][0][1]=1:#include<iostream>#include<cstdio>#include<cstring>#include<ctime>#define原创 2017-10-21 07:39:04 · 232 阅读 · 0 评论 -
[2017纪中10-27]图 分治+DP
题面 首先发现总左往右考虑l到r的边,从u走到v的最小代价,相当于从右往左考虑r到l的边,从v走到u的最小代价。 于是支持从某条边向两边拓展,考虑离线分治。 假设当前在处理分治区间[L,R],设 mid=(L+R)/2,询问区间跨过了 mid 的询问就可以求解,用 DP 得到 lef[i][x][y]表示从 x 出发,处理了从 i 到 mid 的边之后到达 y 的最小代价,以及 rig[i][原创 2017-10-28 07:57:08 · 446 阅读 · 0 评论