![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
-----DP-----
stargazer.
夜を穿つの
展开
-
【LOJ #3283】「USACO 2020 US Open Platinum」Sprinklers 2: Return of the Alfalfa(DP)
Sprinklers 2: Return of the Alfalfa开始把图看反了调了lzlzlz半天显然最后分界线是左上到右下的线考虑DPDPDP这个轮廓设f[l][i][j]f[l][i][j]f[l][i][j]表示当前第lll列,轮廓在第iii行,前面已经放了jjj个洒水器的方案数那么每次就是要么直接从同一行过来要么从更高行折过来,同时加两个洒水器,判一下能不能放洒水器记一...原创 2020-04-23 10:01:58 · 239 阅读 · 3 评论 -
【LOJ #3284】「USACO 2020 US Open Platinum」Exercise(容斥 / 组合数学 / DP)
传送门首先nnn个数的置换个数是n!n!n!证明可以用生成函数循环的egf f=∑i(i−1)!i!xi=∑ixiiegf\ f=\sum_i\frac{(i-1)!}{i!}x^i=\sum_i\frac{x^i}{i}egf f=∑ii!(i−1)!xi=∑iixiln(11−x)=∑ixii=f\ln(\frac{1}{1-x})=\sum_i\frac...原创 2020-04-21 22:06:58 · 323 阅读 · 0 评论 -
【LOJ #6617】「THUPC 2019」摆家具 / furniture(DP / BSGS / 矩阵快速幂)
传送门首先显然k=lognk=lognk=logn显然对于每个iii我们只用关注有多少位与询问的数字不同考虑分成两个部分先对每个数字iii求出与他有jjj位不同的数字价值之和再求出ttt轮后jjj位不同的数字会被计算多少次贡献第一部分可以f[i][j][k]f[i][j][k]f[i][j][k]表示前iii位与jjj有kkk位不同用类似高维前缀和的分治dpdpdp即可O(nkk2)...原创 2020-04-13 21:51:48 · 370 阅读 · 0 评论 -
【Codeforces 536 D】Tavas in Kansas(最短路 / 博弈论 / DP)
传送门首先考虑对S,TS,TS,T求出到每个点最短距离后离散化值域变成O(n)O(n)O(n)对于每个点看做a[diss][dist]=paa[dis_s][dis_t]=p_aa[diss][dist]=pa那么问题就变成在二维平面上做设f[0/1][x][y]f[0/1][x][y]f[0/1][x][y]表示先/后手,在≥x,≥y先/后手,在\geq x,\geq y先/后手...原创 2020-04-01 21:33:31 · 218 阅读 · 0 评论 -
【AGC 043 D】 Merge Triplets(DP)
传送门考虑这个排序的过程如果Ai,j≥Ai,j+1A_{i,j}\geq A_{i,j+1}Ai,j≥Ai,j+1那么Ai,j,Ai,j+1A_{i,j},A_{i,j+1}Ai,j,Ai,j+1在PPP中一定连续也就是说一个AiA_iAi在PPP中可能分成1,1,1;1,2;31,1,1;1,2;31,1,1;1,2;3几种可能的长度组合考虑DPDPDP这样一个长度组合那么...原创 2020-03-28 18:16:18 · 248 阅读 · 0 评论 -
【LOJ #3277】「JOISC 2020 Day3」星座 3(笛卡尔树 / DP / 线段树合并)
传送门显然按照aaa建出笛卡尔树设f[u][h]f[u][h]f[u][h]表示点uuu对应的[l,r][l,r][l,r]区间内所有星星最高的高度为hhh的最小答案考虑转移的时候合并左右儿子与自己的答案设当前点高度为hththt那么就是三部分只有其中一个存在高度≥ht\geq ht≥ht的点其余两部分只能在[0,ht][0,ht][0,ht]里选最小的fff线段树合并维护这个DPD...原创 2020-03-24 21:48:42 · 436 阅读 · 0 评论 -
【Comet OJ - Contest #16 G】小 C 的奇妙序列(组合数学 / DP)
传送门首先记一下k=2k=2k=2的一个做法就是求平方的期望一个想法是直接期望DPDPDP考虑E(an2)E(a_n^2)E(an2)考虑求E((∑i=1nai)2)E((\sum_{i=1}^na_i)^2)E((∑i=1nai)2)拆开后是要求E(ai2),E((∑i=1n−1ai)2)E(a_i^2),E((\sum_{i=1}^{n-1}a_i)^2)E(ai2),E...原创 2020-03-14 20:14:21 · 283 阅读 · 0 评论 -
【LOJ #6338】「SDWC2018 Day2」优秀(DP)
传送门设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii个位置,已经放了1−j1-j1−j的值,jjj有kkk个间隔需要继续填,可以形成lll个数列每次枚举下一个值放几个ppp那么新的数列的方案数由插板法的(p−1k−1)∗l{p-1\choose k-1}*l(k−1p−1)∗l#include<bits/stdc++.h>usi...原创 2020-03-12 20:21:41 · 253 阅读 · 0 评论 -
【Dwango Programming Contest 6th】C - Cookie Distribution(DP)
传送门系数直接是乘起来的不好处理考虑把系数CCC看做每个人在自己有的里面再选出一个作为特别的然后DPDPDP特别的设f[i][j]f[i][j]f[i][j]表示前iii天已经有jjj个人拿了特别的的方案数直接枚举这一天几个人拿了特别的乘两个组合数即可显然这个转化是等价的复杂度O(n2k)O(n^2k)O(n2k)#include<bits/stdc++.h>usin...原创 2020-02-20 20:26:04 · 272 阅读 · 0 评论 -
【LOJ #6075】「2017 山东一轮集训 Day6」重建(DP)
传送门处理出f[i],g[i]f[i],g[i]f[i],g[i]表示走任意iii条边和沿着关键点走iii条边的最短路然后枚举关键点边数求出可行的CCC的l,rl,rl,r对所有可行的rrr取maxmaxmax即可#include<bits/stdc++.h>using namespace std;#define cs const#define re register...原创 2020-02-18 21:03:46 · 206 阅读 · 0 评论 -
【LOJ #6069】「2017 山东一轮集训 Day4」塔(DP)
传送门好像和魔法的碰撞那道题差不多最后空的位置插入所有人之间的方案数就是一个组合数#include<bits/stdc++.h>using namespace std;#define cs const#define re register#define pb push_back#define pii pair<int,int>#define ll long...原创 2020-02-17 14:51:51 · 334 阅读 · 0 评论 -
【洛谷 P3643】【APIO2016】 划艇(DP)
传送门看到满脑子都想的赛艇Excited!Excited!Excited!考虑离散化成一堆区间设f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个,当前在第jjj个区间,在第jjj个区间的有kkk个的方案数然后在跳到下一个区间的时候再算kkk个份分配在第jjj个区间的方案由于是递增的,所以系数为(len[j]k){len[j]\choose k}(klen[j]...原创 2020-02-13 22:54:07 · 164 阅读 · 0 评论 -
【Codeforces 623E】Transforming Sequence(MTT)
传送门设f[i][j]f[i][j]f[i][j]表示iii个数,jjj位有111时的方案数那么有fa,i∗fb,j∗(i+ji)2bi−>fa+b,i+jf_{a,i}*f_{b,j}*{i+j\choose i}2^{bi}->f_{a+b,i+j}fa,i∗fb,j∗(ii+j)2bi−>fa+b,i+j于是倍增dp,fftdp,fftdp,fft优化要写...原创 2020-02-04 19:33:52 · 179 阅读 · 0 评论 -
【Codeforces 848 E】Days of Floral Colours(生成函数+DP)
传送门考虑把环拆成两行相对方向的同色看做两行相同位置同色实际上只有四种可能的拼法AA;ABAB;ACA;C;AA;ABAB;ACA;C;AA;ABAB;ACA;C;(CCC是和对面的同色的)首先设gig_igi表示只由前两种情况拼起来的长度为iii的段的方案数那么有gi=gi−2+gi−4g_i=g_{i-2}+g_{i-4}gi=gi−2+gi−4设g0i=gii2,g1i...原创 2020-01-19 13:30:06 · 336 阅读 · 0 评论 -
【LOJ #3193】「ROI 2019 Day2」机器人高尔夫球赛(DP+Map)
传送门如果不考虑坐标范围可以显然的得到一个O(nm)O(nm)O(nm)的dpdpdp实际上可以发现对于一个位置,如果一个洞不是和他的曼哈顿距离小于等于2,那么就一定不会被这个洞更新并且除此之外就只可能会被左下方的点更新因此只需要把所有特殊更新的点提出来按对角线用MapMapMap维护转移即可#include<bits/stdc++.h>using namespace ...原创 2019-12-28 09:03:37 · 537 阅读 · 0 评论 -
【LOJ #2264】「CTSC2017」吉夫特(Lucas定理+Dp)
传送门用LucasLucasLucas定理展开后发现就是不能有二进制位前111后000的情况可以直接从后往前枚举之前的子集dpdpdp3log3^{log}3log也跑得过去不过可以分块优化f[i][j]f[i][j]f[i][j]表示前292^929位为iii,后292^929维为jjj的子集的方案数#include<bits/stdc++.h>using namespa...原创 2019-11-02 17:47:55 · 148 阅读 · 0 评论 -
【洛谷P4608】【FJOI2016】—所有公共子序列问题(序列自动机+DP+高精度)
传送门对两个串建出序列自动机之后直接n2dpn^2dpn2dp即可由于答案很大,需要写个高精度由于答案很大,要写压位高精,否则会TTT由于空间直接开不下,于是写了个mapmapmap存状态由于出题人很神奇,输出方案的话必须要在开头输出一个空串#include<bits/stdc++.h>using namespace std;const int RLEN=1<&l...原创 2019-09-27 18:05:57 · 138 阅读 · 0 评论 -
【Codeforces 613E】—Puzzle Lover(DP)
传送门考虑最后路径一定是分三段左边的先向左走再走回来中间上下晃右边先向右走再拐回来考虑把前2部分合在一起算每次就把当前列新的可行的第一种加入dpdpdp数组即可枚举右边用哈希算一下答案为了方便就把SSS反过来不过要判一些重复情况具体看代码(太麻烦了)#include<bits/stdc++.h>using namespace std;const int RLE...原创 2019-10-02 21:23:28 · 206 阅读 · 0 评论 -
【校内模拟7.30】—quests(dp)
传送门考试的时候没读懂怎么才准确猜出考虑f[i]f[i]f[i]表示长度为iii全部分辨出来的方案数直接不好求,考虑求出有区间分辨不出来的方案数显然必定是连续的一段区间无法分辨容斥的话就相当于有几个小区间相互能分辨,自己内部无法分辨考虑g[i][j]g[i][j]g[i][j]表示把iii个点分成jjj段的方案数可以直接枚举下一段的长度O(n3)dpO(n^3)dpO(n3)dp...原创 2019-07-30 20:41:12 · 140 阅读 · 0 评论 -
【BZOJ2436】【NOI2011】—NOI嘉年华(dp)
传送门发现这要把一段的活动归到一边去先离散化时间num[l][r]num[l][r]num[l][r]表示全部在[l,r][l,r][l,r]内的活动的个数pre[i][j]pre[i][j]pre[i][j]表示前iii的时间内给一边jjj个另一边最多有多少个则pre[i][j]=Maxkmax(pre[k][j]+num[k][i],pre[k][j−num[k][i]])pre[i...原创 2019-04-04 18:49:45 · 198 阅读 · 0 评论 -
【洛谷P4112】【HEOI2015】—最短不公共子串(序列自动机+后缀自动机+DP)
传送门对2个串分别建出SamSamSam和序列自动机对四种情况分别跑一次n2dpn^2dpn2dp即可#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob==ib...原创 2019-09-27 18:02:37 · 112 阅读 · 0 评论 -
【洛谷P3082】【USACO13MAR】—项链Necklace(Kmp+DP)
传送门f[i][j]f[i][j]f[i][j]表示走到第一个的iii,第二个的jjj的最少删去用AcAcAc自动机的nxtnxtnxt转移一下就可以了#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[R...原创 2019-09-25 16:35:34 · 196 阅读 · 0 评论 -
【LOJ #3084】【GXOI / GZOI2019】—宝牌一大堆(DP)
传送门首先把国士无双和七对子判掉实际上可以发现杠根本没用因为(43)>(44)∗2{4\choose 3}>{4\choose 4}*2(34)>(44)∗2设f[i][j][k][l][0/1]f[i][j][k][l][0/1]f[i][j][k][l][0/1]表示前iii种,已经凑出jjj个面子,有k,lk,lk,l个从i−1,i−2i-1,i-2i−1,...原创 2019-09-20 18:07:50 · 119 阅读 · 0 评论 -
【BZOJ5461】 【PKUWC2018】—Minimax(线段树合并优化dp)
传送门发现其实就是左右2棵子树,左儿子选到某个值的概率就是选最大值的概率∗右儿子的值比它小的概率选最大值的概率*右儿子的值比它小的概率选最大值的概率∗右儿子的值比它小的概率+选最小值的概率∗右儿子的值比他大的概率+选最小值的概率*右儿子的值比他大的概率+选最小值的概率∗右儿子的值比他大的概率右儿子类似由于保证所有值都相等然后上线段树合并mergemergemerge的时候dpdpdp一...原创 2019-04-06 21:59:59 · 704 阅读 · 0 评论 -
【BZOJ3572】【HNOI2014】—世界树(虚树+倍增+dp)
传送门考虑将虚树建出来我们先对于每个虚树的点点求出被哪个地方支配然后考虑对每一条边考虑如果两边点被同一点支配就不用管了否则考虑倍增找到中点分别计算一下贡献可以处理一个remremrem表示子树中除去已经被计算过的剩下的sizsizsiz也就可以方便统计那些没有关键点的子树了具体可以看代码#include<bits/stdc++.h>using namespace ...原创 2019-04-10 21:24:03 · 139 阅读 · 0 评论 -
【BZOJ3594】【SCOI2014】方伯伯的玉米田(dp)
传送门显然的一个性质就是每次拔高都拔高一段[x,n][x,n][x,n]最优考虑朴素dpdpdpf[i][j][k]f[i][j][k]f[i][j][k]表示前iii株玉米,拔高了jjj次,当前最高的为kkk的数量发现iii这一维没有用,可以直接省去考虑转移是每次找之前满足x≤h[i]+j,y≤kx\le h[i]+j,y\le kx≤h[i]+j,y≤k的f[x][y]f[x][y]...原创 2019-03-27 19:43:01 · 74 阅读 · 0 评论 -
【BZOJ4828】【HNOI2017】—大佬(LmyAKIOI!)
传送门发现其实具体哪一天攻击并不重要我们首先只需要保证用最少的天数不死就可以了于是可以首先f[i][j]f[i][j]f[i][j]表示前iii天,信心为jjj的最多的可以用来攻击的天数这个转移很简单那现在就变成了能不能用ttt天时间击败大佬具体有哪些伤害也不好求出来只能用搜索来得到只攻击一次击败大佬是很好判断的假设有2次攻击,用时分别为dx,dydx,dydx,dy,伤害为fx...原创 2019-04-05 20:25:20 · 527 阅读 · 0 评论 -
【BZOJ3611】【HeOI2014】—大工程(虚树+dp)
传送门首先肯定建出虚树考虑三种答案如何分别统计路径长度和显然示是对于每条边考虑一下上下有多少个点,乘一下就可以了最大值显然就是树的直径最小值可以考虑树形dpdpdp,考虑mn[i]mn[i]mn[i]表示iii到其子树中最近的距离显然可以类似直径树形dpdpdp解决#include<bits/stdc++.h>using namespace std;#define l...原创 2019-03-12 11:00:36 · 141 阅读 · 0 评论 -
【BZOJ5248】【九省联考2018】—一双木棋(轮廓线dp)
传送门轮廓线dp入门题考虑我们用0/10/10/1串来表示一个已经选了的点和没选的点之间的轮廓如果从左下到右上比如向上为0,向右为1,那轮廓线就是一个01串我们发现选了一个点实际上只是改变了轮廓方向的顺序比如原来是...000111......000111......000111...画图发现能填一个点当且仅当轮廓线为010101时而且填完之后为101010可以通过和3进行位运算...原创 2019-02-26 00:07:21 · 118 阅读 · 0 评论 -
【BZOJ5337】【TJOI2018】—STR(后缀自动机+dp)
传送门既然是问一堆串拼出一个串的子串的方案数,那显然是要在这个串的SamSamSam上dpdpdp了考虑f[i][j]f[i][j]f[i][j]表示前iii个匹配串,匹配到jjj的方案数则可以暴力枚举自动机上的点看能不能从这个点开始匹配完一个串可以的话就转移复杂度O(S∗∑∣lenai∣)O(S*\sum |len_{a_i}|)O(S∗∑∣lenai∣)#include<...原创 2019-02-24 20:12:10 · 142 阅读 · 0 评论 -
【BZOJ5302】【HAOI2018】—奇怪的背包(裴蜀定理+dp)
传送门题意:求满足x1v1+x2v2…+xnvnmod p=wx_1v_1+x_2v_2…+x_nv_nmod\ p=wx1v1+x2v2…+xnvnmod p=w的个数只把是否取vvv看做2种不同情况考虑裴蜀定理ax+by+cz...=pax+by+cz...=pax+by+cz...=p有解当且仅当gcd(a,b,c...)∣pgcd(a,b,c...)|...原创 2019-02-28 09:07:52 · 173 阅读 · 0 评论 -
【BZOJ4559】【JLOI2016】—成绩比较(拉格朗日插值+dp)
传送门dpdpdpf[i][j]f[i][j]f[i][j]表示前iii门课,有jjj个人没有被碾压的方案数考虑f[i−1][j]f[i-1][j]f[i−1][j]转移到f[i][w](j≤w)f[i][w](j\le w)f[i][w](j≤w)首先要选出w−jw-jw−j个新的没被他碾压的人由于之前已经有一些没被碾压的人,所以方案数为(n−i+1w−j){n-i+1\choose...原创 2019-07-02 19:37:34 · 157 阅读 · 0 评论 -
【LOJ #3111】【SDOI2019】—染色(DP)
传送门据说是很套路的题考虑显然一段连续为000的答案可以预处理出来分类讨论最左右2行分别是什么情况发现只有5种(实际上是7种,有2种可以合并)1、[acbd]1、\begin{bmatrix}a &c\\b&d\end{bmatrix}1、[abcd]2、[abbc][acba]2、\begin{bmatrix}a&b\...原创 2019-09-12 22:02:02 · 298 阅读 · 2 评论 -
【BJOI2019 Day1】简要题解
T1:传送门很显然是要在AcAcAc自动机上dpdpdp一个显然的dpdpdp是f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个字符,当前在自动机的点jjj,已经有kkk个咒语的最大价值但是由于咒语最多有O(n2)O(n^2)O(n2)个复杂度太差了由于max∏vc\max \sqrt[c]{\prod v}maxc∏v不好处理考虑转成对数就变成max...原创 2019-09-05 14:22:08 · 152 阅读 · 0 评论 -
【HihoCoder #1529】— 不上升序列(dp+斜率)
传送门题解原创 2019-08-30 21:44:31 · 194 阅读 · 0 评论 -
【BZOJ 3157&&BZOJ 3516】—国王奇遇记&&加强版(扰动法+Dp)
传送门加强版原创 2019-08-16 17:11:08 · 202 阅读 · 0 评论 -
【USACO12JAN】—视频游戏的连击Video Game Combos(AC自动机+dp)
描述贝西在玩一款游戏,该游戏只有三个技能键 “A”“B”“C”可用,但这些键可用形成N种(1 <= N<= 20)特定的组合技。第i个组合技用一个长度为1到15的字符串S_i表示。当贝西输入的一个字符序列和一个组合技匹配的时候,他将获得1分。特殊的,他输入的一个字符序列有可能同时和若干个组合技匹配,比如N=3时,3种组合技分别为"ABA", “CB”, 和"ABACB",若贝西输入...原创 2019-07-19 11:57:57 · 176 阅读 · 0 评论 -
【洛谷P4707】—重返现世(推广Kth Min-Max容斥+dp)
传送门考虑kthmin−maxkth min-maxkthmin−max容斥ans=∑T⊆UE(kth(T))=∑T⊆U(−1)∣T∣−k(n−1k−1)E(min(T))ans=\sum_{T\subseteq U}E(kth(T))=\sum_{T\subseteq U}(-1)^{|T|-k}{n-1\choose k-1}E(min(T))ans=∑T⊆UE(kth(T))=∑T⊆...原创 2019-07-04 18:22:35 · 161 阅读 · 0 评论 -
【BZOJ4498】—魔法的碰撞(组合数学+dp)
传送门首先我们发现一个排列,2个魔法使之间一定要填max(di,di+1)−1max(d_i,d_{i+1})-1max(di,di+1)−1个格子而如果总共一定要填的为kkk个,贡献就是(L−kn){L-k\choose n}(nL−k)考虑dpdpdp出每种情况的方案数首先按ddd从大到小排序消除maxmaxmax我们发现一个魔法师的贡献只和他左右2边的人比他大还是小我们考...原创 2019-07-13 21:03:07 · 144 阅读 · 0 评论 -
【BZOJ2655】—calc(拉格朗日插值+生成函数+dp)
传送门考虑每一个数iii的贡献不选就相当于乘111选的话就是乘iii最后就相当于求∏i=1A(1+ix)\prod_{i=1}^{A}(1+ix)∏i=1A(1+ix)的第nnn项系数考虑dpdpdp先强制a1≤a2……≤ana_1\le a_2……\le a_na1≤a2……≤an最后乘n!n!n!f[i][j]f[i][j]f[i][j]表示A=iA=iA=i时第jj...原创 2019-07-02 19:50:48 · 172 阅读 · 0 评论