---------------dp-------------
文章平均质量分 83
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CodeForces 1225E Rock Is Push(dp + 前缀和优化)
大致题意:一个迷宫,里面有很多箱子,你可以向右或者向下走。当你遇到一个或者多个箱子的时候,你可以把箱子往你移动的方向推动,但是不能把箱子推出到墙壁外面。你从左上角出发,问你有多少种方法到右下角。考虑如果没有箱子,那么就是一个很简单的递推问题,对于一个格子,要么从上面要么从左边来。有箱子的话,由于箱子可以被推动而且不能推到外面,所以我们要考虑是否可以从上面或者下面过来。还...原创 2019-10-26 23:53:55 · 993 阅读 · 0 评论 -
CodeForces 939F Cutlet(dp+单调队列优化)
好久没有见过这种单调dp,差点连单调队列都不会了…… 大致题意,给以一块做鸡扒或者牛扒的肉,然后告诉这块肉要两面都煎恰好n分钟才能够熟,并且生的或者焦的都不行。但是我只能在特定的时间区间内把肉翻面。现在问是否能够吃到肉,如果可以并求出最少需要翻几次面。 首先,本题状态的表示就已经是一个难点了。这个怎么想到的,其实我也不知道。dp[i][j]表示总共用时i分钟,当前不在煎的面煎了j分钟的最小翻面次数。对于朴素的dp,我们很容易想到dp[i][j]=min(dp[i-1][i-j]+原创 2018-03-16 00:32:34 · 521 阅读 · 0 评论 -
BZOJ 1799 self 同类分布(数位dp)
非常裸的一个数位dp。令dp[len][sum][mod][r]表示长度为len的数字,当前已经有各位数字的和为sum,最后各位数字和为mod,当前数值对mod取模结果为r时的方案数。根据数据范围,我们发现,如果按照这样子开成四维,空间会炸。但是,在实际操作的时候,我们可以通过枚举固定的mod来少掉一维。接下来考虑转移方程,,其中sum>i。退出条件的话,当len==0时,当然要求sum要用完等于0,同时余数要为0。按照普通数位dp记忆化搜索的套路去做即可。具体见代码:原创 2018-07-22 15:23:41 · 250 阅读 · 0 评论 -
HDU 6321 2018HDU多校赛 第三场 Dynamic Graph Matching(状态压缩dp)
大致题意:一开始图是空的,总共有m个操作,每次可以添加或者删除一条边,每个操作结束后,输出这个图里面匹配数为1,2,...,n/2的方案数。看到n的范围是10,然后操作数是3W,就应该直接想到这是一个状压dp的……一开始还往组合数学,容斥原理方面去想……还好最后做出来了。首先,我们考虑加入一条边之后会产生多少贡献。显然是加入这条边之前,所有不包含这条边以及这两个点的匹配的数目。我们用dp[status][i]表示取的点的状态为status,然后构成i个匹配方案数。当加入边(x,y)之后,dp[status|原创 2018-07-31 10:25:10 · 258 阅读 · 0 评论 -
HDU 6327 2018HDU多校赛 第三场 Random Sequence(概率期望dp+数论)
大致题意:给你一个数列,里面的数字要么是0,要么是1~m中的一个数字。你需要随机的把这些0替换成1~m中的任意一个,然后再计算着整个数列的权值。权值定义为,现在问你最后权值的期望。由于这个v数组是输入的,也就是说没有什么性质,所以这个权值的表达式也不能用数论的知识推出什么结论。因此我们考虑暴力的dp。我们令dp[i][j][k][l]表示当前计算到第i位,且a[i]取j,a[i-1]取k,a[i-2]取l时的期望的分子。那么,从这个状态出发,枚举a[i+1]的数值,就看求出着四个数字的gcd,对应转移过去即原创 2018-07-31 15:33:41 · 809 阅读 · 0 评论 -
HDU 6360 2018HDU多校赛第五场 kaleidoscope(Polya计数+dp)
大致题意:一个菱形六面体,有60个面,然后每个面进行染色,然后要求是第i种颜色不少于c[i]个,问有多少个本质不同的染色方案。看到这个菱形六面体,60个面,不要自闭……其实仔细想想这个图形也很简单。我们把每一个凸出来的菱形顶点相连,我们发现会变成一个十二面体。正如题目种所说,菱形六面体是十二面体的每个面中点往中间收缩形成的。因此,这个60面看起来吓人,但其实就是一个十二面体。所以对于十二面体,我们同样考虑用polya计数。根据套路,首先计算定理和置换数,然后计算每一个置换的循环节,还有每一类置换群对应的循环原创 2018-08-07 21:27:28 · 623 阅读 · 0 评论 -
HDU 6407 2018HDU多校赛 第八场 Pop the Balloons(状态压缩dp)
大致题意:给你一个m*n的表,其中为Q的位置表示为气球。每次,我扎破一个气球会导致与其相同行和列的气球一起爆炸。现在,询问给你扎1..k次,对于每个扎气球的次数i,问你有多少种方式使得可以把所有的气球扎破。数据范围M和N一个是12一个是20,显然的一个状态压缩dp,但是这个状态却不是那么好表示。按照正常思路,由于m的范围更小,所以我用一个12位的数字表示每个行是...原创 2018-08-18 14:34:28 · 1027 阅读 · 0 评论 -
HDU 5470 Typewriter(后缀自动机 + 单调队列优化dp)
大致题意:给你一串字符以及单独打印每一个字母的代价,对于一个字母,你可以选择直接打印,也可以选择利用复制粘贴的方法来完成。对于复制粘贴,每次选择长度为i的字符串的代价是i*A,复制的代价是B,粘贴的代价也是B。即复制并粘贴一个长度为x的字符串的代价是x*A+2*B。现在问把这一整个字符串打印出来的代价是多少。这道题目在今年三月的时候就开始做了,但是当时一直WrongAnswer没有找到原因,然后最近复习字符串重新做了一下,才终于过了。首先,我们考虑暴力的做法。我令dp[i]表示打印到第i个字符的最小代价,那原创 2018-08-17 16:37:23 · 566 阅读 · 2 评论 -
HDU 6416 2018HDU多校赛 第九场 Rikka with Seam(dp + 前缀和优化)
大致题意:给你一个n*m的01矩阵,现在要让你每一行和每一列都去掉一个数字,而且要求相邻两行之间去掉数字的位置的绝对值要小于等于k。现在问你删除之后的矩形最多有几种。首先,我们一行一行考虑,对于同一行,显然是看有多少个块,有多少个块就有多少个方案。然后对于整个矩阵来说,任意位置(i,j)可以从上一行的(j-k,j+k)之间转移过来。dp[i][j]表示不考虑重复的情况下,处理到第i行,且第i行删掉第j个位置的方案数。那么,显然根据之前说的转移区间,有转移方程:原创 2018-08-21 11:24:54 · 662 阅读 · 0 评论 -
牛客练习赛27 F 计数(状态压缩dp + 矩阵快速幂优化)
中文题。由于m最大范围只有5,而且每一个位置只能够填写3和7,所以我们不妨考虑状压,用0和1分别表示3和7,这样就是一个5位的二进制数字。那么我们的限制条件也可以很好的通过位运算来判断。接着我们考虑这么多个位置如何计算方案数。首先,我们简化问题,把问题变成一条链而不是一个圈,这样一个位置可以放什么数字就只是与前面四个位置有关系。如果之前的7的个数已经大于3的个数,那么当前位置放...原创 2018-09-24 10:47:42 · 349 阅读 · 0 评论 -
计蒜客 2018 ICPC宁夏 Factories (树形dp)
大致题意:给你一棵N个节点的树,然后你要在这个树种选择K个叶子节点建立工厂,使得任意两点之间的距离和要最小。典型的树形dp的题目。我们设dp[x][i]表示在x节点所包的子树内已经选择了i个叶子的最小距离和,那么有状态转移方程dp[x][i]=min(dp[x][i],dp[x][i-j]+dp[son][j]+w*j*(k-j)),其中son表示x的儿子。注意到,dp[x][i]的转移与dp[x][i-j]相关,因此如果正着循环,可能会出现一个叶子节点多次更新一个父亲的情况。所以常规的操作是编程倒着枚举j原创 2018-07-22 12:27:22 · 1568 阅读 · 0 评论 -
计蒜客 2017ICPC乌鲁木齐A Coins(概率期望dp)
大致题意:总共有n个硬币,初始的时候所有的都朝下。然后进行m次投币,每次投币要投p个硬币,这p个硬币相互独立,且最后朝向正反概率相同。为了使得最后朝上的硬币最多,采取最优的投币方式。现在问你按照这种方式,最后朝上的硬币个数的期望是多少。对于这种题目,如果不能够推出一个O(1)的通项公式,那么基本就是一个概率期望dp了。对于这题,我们首先考虑怎样才是最优的投币方式,概率我们不能决定,但是我们可以选择每次投哪p个硬币。显然,每次我们投的时候都只投那些朝下的硬币,不动那些已经朝上的硬币,只有当朝下的硬币不够k个的原创 2018-07-30 11:07:16 · 369 阅读 · 0 评论 -
HDU 3247 Resource Archiver(AC自动机+状态压缩dp+最短路BFS)
大致题意:给你一些合法字符串,和一些不合法串,现在要求你构造一个字符串,使得这个字符串包含所有哦的合法串,且不包含任何不合法串,而且长度最短。 这里了涉及到一个长度最短,可能就和之前的一些题目不同。我们注意到这个数据范围,合法串只有最多10个,所以状态压缩dp很容易想到。这里是求字符最短长度,如果把长度看做代价,很容易发现,此题和状态压缩的鼻祖 HDU 4568 很像。这题是要求你在一个矩阵中取10个以内的东西,每次走一步,问你最少需要走多少步能够取完所有的东西。今天这题则是构造字符串,要求原创 2018-02-25 10:00:29 · 379 阅读 · 0 评论 -
CodeForces 946G Almost Increasing Array(dp)
LIS的题目见多了,但没发现自己连这么一个浅显的套路都不知道…… 大致题意:给你一个序列,然后问你最少替换几个数字可以使得这个序列变成Almost Increasing Array。这个序列可以,删除其中一个数字可以变成一个严格递增的序列。 首先是考虑简化问题。如果不考虑删除数字和严格,也即把一个序列替换成不下降的序列最少替换个数。这个问题很显然,用n-LIS即可。再进一步,如果要求严格递增呢?这就是一个在此之前居然不知道的经典套路:首先把每个数字减去其对应位权,然后再求原创 2018-03-18 11:28:04 · 513 阅读 · 0 评论 -
CSU 2069 Saruman‘s Level Up(数位dp/组合计数)
大致题意:让你求在1到n范围内转换成二进制后1的个数是3的倍数的数字的个数。 典型的数位dp。设置dp[len][x]表示长度为len的二进制数字中含有x个1的个数。显然又转移方程dp[len][x]=dp[len-1][x-1]+dp[len-1][x]。记忆化搜索考虑lim的影响按照套路做即可。但是会发现对于1e8以上的数据就已经会超时了。经过分析可以发现,当len很大而x很小的时候,dfs的层数会比较多,时间消耗比较大。我们可以考虑增大这个x。容易发现,我计算长度为len的数字中1为x的原创 2018-04-17 21:51:29 · 265 阅读 · 0 评论 -
CSU 2020 Card Hand Sorting(暴力枚举+LIS DP)
大致题意:有n张扑克牌,大小规则有所不同,2是最小的,没有小丑,其他不变。现在按照顺序给出这n张牌,要求你进行排序,使得同花色的排连续的排在一起,然后每个花色内部要求递增或者递减。每次你可以把某一张牌移动到某两张牌中间或者最前和最后面。问最少的移动次数。 首先,还是回顾LIS相关的应用。显然就是求最小交换次数使得一个序列不上升或者不下降。所有同样也可以考虑用LIS来解决这道题。但考虑到有花色的限制,必须先去解决花色的问题。这里由于数据范围比较的小,可以考虑暴力的枚举最后的排列方式。由于花色只原创 2018-04-05 23:54:09 · 280 阅读 · 0 评论 -
计蒜客 2018 ICPC宁夏 Trouble of Tyrant(单调队列+离线处理+最短路)
大致题意:给你一个包含2n-3条边和n个点的图,具体图的形状在下图中给出。告诉你每条边的长度,让你回答q个询问。每个询问包含一个数字di,意思是如果把所有边的长度都增加di,从1到n的所有路径中最短的路径长度是多少。 注意到,每次路径长度增加,对于经过路条数多的路径来说,增量更大。因此当增加很多的时候,选择经过路条数少的路径会更优。又观察到,这个图中,总共从1到n总共有n-1条路,对应经过路条数恰好也是1~n-1。因此,对于不同路条数的路原创 2018-04-23 21:55:17 · 385 阅读 · 0 评论 -
CodeForce 958C3 Encryption (hard)(dp+树状数组)
大致题意,给你n个数字,然后让你把这n个数字分成连续的k组,然后每一组的权值是每组所有数字的和模p。现在问所有组的权值和的极值。 首先,我们说一下这道题目的前两个版本的解法。C1是求最大值,k固定等于2,这个随便怎么暴力都行。 C2也是求最大值,然后n、k、p的范围分别是2*10^4、50和100。我们可以考虑简单的dp。令dp[i][j]表示前i个数字分成j组的最大值。有转移方程:dp[i][j]=max(dp[k][j-1]+(s[i]-s[k])%p)。可以看到这个dp的时原创 2018-04-20 23:37:08 · 409 阅读 · 0 评论 -
ZOJ 4027 Sequence Swapping(DP+思维)
大致题意:给你一些括号,有左括号有右括号,每一个括号对应一个数值vi。当左右括号i、j相邻并且左括号在左、右括号在右,你可以选择交换这两个括号的位置,并且产生一个vi*vj的权值。交换次数不限,现在问你能够产生的最大权值和是多少。 首先,对于左括号来说,如果往右移了一位,即与某一个右括号交换了,那么就一定不会交换回来。这是一个很明显的无后效性,因此考虑...原创 2018-05-04 13:51:52 · 512 阅读 · 0 评论 -
CodeForces 981D Bookshelves(dp+贪心)
大致题意:给你n本书,要求你按顺序把这些书放到m个书架上面,每个书架的权值定义为书架内所有书的权值和。现在要求求这些书架权值的按位与操作和最大。 考虑二进制的性质,最高位如果取了,肯定比不取的值大。因此,如果存在一种情况使得二进制下,某一个高位为1,那么最后结果肯定大于等于这一位为1的数字。然后,最后结果显然是可以按位分解的,具有叠加性,例如样例24=(11000)2,那么一定能够拼凑出8和16。于是我们就可以考虑从高位开始贪心累加,如果令答案这一位为1可以找到可行解,那么把这一位贡献加入原创 2018-05-28 11:25:39 · 846 阅读 · 0 评论 -
CodeForces 981E Bookshelves(dp+思维)
大致题意:给你q个操作和一个长度为n的序列,初始状态序列全为0。每个操作是对区间[l,r]增加v。然后,现在你可以只选择这q个操作中的任意几个进行操作,问你操作完毕之后整个序列中最大值是否可以是1~n,输出可以的数字。也就是说,对于每一个数字i,看能否找到一个操作的子集,使得操作完毕后区间最大值为i。 可以说刚读完题的时候没有任何想法,完全不知道怎么下手,但是数据范围给了我们提示,n、q分别是1e4级别,那么可以考虑O(nq)的算法。首先,对于询问,我们按照操作左端点l进行排序。其次,再原创 2018-05-28 23:22:48 · 385 阅读 · 0 评论 -
CodeForces 1051E Vasya and Big Integers(dp + 树状数组 + 字符串哈希/后缀数组)
大致题意:给你一个很大的数字,然后你可以把这个数字拆分成为任意多个部分,要求每一个部分的数字大小要在一个区间内,问有多少种拆分方式。由于是给定数字的拆分,所以区间对于拆分的限制,仅仅是限于长度。也即如果拆分的部分的长度介于上界和下界的长度之间,那么直接查分即可。如果长度等于上界或者下界,那么需要按位比较于界限的大小。可以看到,这个过程相当于一个转移的过程,很自然而然的想到用...原创 2018-09-24 12:33:42 · 640 阅读 · 0 评论 -
牛客国庆集训派对Day2 E 数据排序(状态压缩dp)
虽然说得分可以一样,但是我们还是可以仅仅只用两个状态0和1来表示这一题。某一个位置为0表示当前这个数字还没有被标号,也即当前数字比所有的已经标号的数字都要小。如果为1,那么说明这个已经标号,并且这个数字与比它先标号的数字和与其相等的数字的冲突值已经计算过了。于是一个状态,我们可以用一个15为的二进制数字来表示。令dp[i]表示当前的状态,那么当前状态就可以转移到后面的状...原创 2018-10-02 21:16:58 · 313 阅读 · 0 评论 -
CodeForces 1140E Palindrome-less Arrays(DP + 思维)
大致题意:给你一个序列,数字有-1或者1到k构成。其中的-1需要用1到k中任意一个数字替代,现在定义一个坏序列的标准是把-1替代完毕后,没有长度大于1的奇回文串。问你在所有的替代方案中,最后能得到不是坏序列的方案数是多少。这里的一个奇回文串,看似很复杂不知道应该怎么做,但是其实很容易发现,所有的奇回文串必定包含一个长度为3的回文串。换句话说,含有长度为3的回文串的就是坏序列...原创 2019-03-26 23:35:40 · 486 阅读 · 0 评论 -
CodeForces 1132G Greedy Subsequences(线段树 + LIS)
大致题意:求所有长度为K的连续子区间的最长上升子串长度。我们知道,朴素的LIS问题有O(nlogn)的解法,但是如果有很多个区间,显然也是做不了的。这里我们学习到了一种解决LIS问题的新姿势。我们考虑每一个数字a[i],令nxt[i]表示它右边第一个比它大的数字的位置。这样每一个节点要么只有一个nxt[i],要么没有nxt[i]。如果我们把每一个i与nxt[i]连一条边...原创 2019-04-11 10:20:50 · 335 阅读 · 0 评论 -
CodeForces 1119F Niyaz and Small Degrees(树形dp + multiset)
大致题意:一棵树,每条边都有权值。你可以把一些边给删除,现在问你,当满足所有点的度都小于等于x的时候,删除的边的权值和最小是多少。要求输出x从0到n-1的所有结果。这题是最近遇到过的最麻烦的题,太菜了,做了好久。。。一开始的想法,试图去贪心,寻找一种策略能够保证删边的时候权值和最小。然而显然并没有这种策略。然后考虑x从大到小顺序处理,每次只处理度数为当前x的点。对于当前...原创 2019-04-13 17:06:25 · 422 阅读 · 0 评论 -
2019牛客多校赛 第一场 I题 Points Division (DP + 线段树)
大致题意:给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi)。现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj。然后对于所有的划分方法,找到并输出 首先那个划...原创 2019-07-19 12:59:40 · 953 阅读 · 26 评论 -
CodeForces 1197E Culture Code(最短路/dp)
大致题意:给你n个俄罗斯套娃,告诉你每个套娃内外的半径。问你这里面有多少个集合,可以使得外层不能再套别的套娃而且里面剩余的空间最小。这题的话想到思路还是不难的,无非是套娃的嵌套关系。如果我们找到所有的嵌套关系,我们可以考虑建立一个有向带权图。对于任意的边<u,v,w>表示第u个套娃可以套第v个套娃而且套了的话中间缝隙为w。如此,我们只需要对于这个带权有向图求一下...原创 2019-07-23 13:06:44 · 541 阅读 · 0 评论 -
2019牛客多校赛 第七场 H Pair(数位dp)
大致题意:告诉你范围A和B,让你求在两个范围内,有多少对数字可以使得二者按位与大于C或者异或小于C。一个比较常规的数位dp,然而比赛的时候由于自己复杂度计算错误,还写了好久的优化,最后发现不优化也能过。我们令dp[len][x][y][lim1][lim2]表示在二进制下,当前长度为len的时候,第一个条件的状态为x,第二个条件状态为j,第一个数字的限制情况为lim1,...原创 2019-08-08 17:20:41 · 772 阅读 · 8 评论 -
2019HDU多校赛 第七场 HDU 6652 Getting Your Money Back(区间dp + 单调优化)
大致题意:告诉你你的存款余额在一个区间内,然后每次你可以猜一个数字,如果余额大于等于你猜的数字,那么你可以取走这些钱并且代价为a,否则为代不能取走且价为b。你可以多次重复这个动作,直到你能够确定你初始时的总共有多少钱。现在问你,最少花费多少的代价能够知道你初始时的账户余额。这题有点像二分的意思,如果a和b相等,那么显然按照二分的策略即是最优。考虑到这一点,我们显然可以发现,...原创 2019-08-13 11:17:40 · 758 阅读 · 0 评论 -
CodeForces 1238E Keyboard Purchase(状态压缩dp)
大致题意:给你一个由最多m种字符构成的长度为L的字符串。定义两个相邻字符的代价之差是两个字符对应位置的绝对值,现在让你找到这m种字符的一种排列方式,使得总的代价之和最小,问最小代价是多少。很神奇的一种状压姿势。我们考虑最好的情况下肯定是让任意两个字符位置之差为1,但是实际上相邻的最多只有两个,不能所有的位置之差都为1。但是我们在做的时候,可以维护当前可以取的最小距离。初...原创 2019-10-09 11:07:47 · 767 阅读 · 0 评论 -
CodeForces 1139D Steps to One(期望DP + 容斥原理)
大致题意:一个数列,一开始是空的,每次往他最后一个位置随机的加上一个[1,m]范围内的数字,然后对当前数列所有的数字求gcd,如果gcd不为1,那么就继续添加,否则停止。问最后这个数列期望的长度。这是一个比较明显的期望dp。我们考虑dp[i]表示初始gcd为i的时候也即数列的第一个数字为i的时候,这个数列的期望长度。显然,有转移方程: ...原创 2019-03-23 20:49:14 · 479 阅读 · 5 评论 -
HDU 4878 ZCC loves words(AC自动机 + dp + 矩阵快速幂 + 中国剩余定理)
大致题意:给你一些匹配串和一个很长的长度L。让你计算所有长度为L的小写字母构成的字符串的得分总和对5047621取模后的数值。这里,每个字符串s的得分定义为,若s的子串s[i..j]等于第k个匹配串,那么产生p[k]*(len[k]+j)的得分,最后的得分为每一次得分的积。由于涉及到匹配的问题,所以很自然的可以想到用上AC自动机。我们考虑AC自动机上的dp,我们令dp[l]...原创 2019-02-18 22:58:22 · 348 阅读 · 0 评论 -
CodeForces 932G Palindrome Partition(回文自动机 + dp)
大致题意:给你一个字符串,让你把它分为k个部分,k为偶数。设这k个部分分别表示为s1,s2,...,sk,问使得对于每一个i都满足的划分方法有多少种,也即使得这k个部分构成回文的方法有多少种。由于是回文,我们当然要想办法往回文上面去靠。根据题意有我们假设第一段长度为j,令有如果我们把排列方式换一下,令 我们可以发现,S'恰好是一个回文串。那么我们推广一下,我...原创 2019-02-27 23:52:30 · 541 阅读 · 0 评论 -
牛客国庆集训派对Day3 B Tree(树形dp + 组合计数)
题意有点绕,其实就是让你求一个点能被多少个点集包含,同时这些点集内的点要相互连通。首先,简单来说,如果只是计算一个有根树中任意一个点被多少个只包含它以及它的子树的点的点集包含,那么直接普通的树上统计的trick就可以搞定。但是现在问题是,点集的点可以是其子树之外的点。我们注意到,对于根来说,它的答案都满足点集里面的点都在它的子树里面,所以说如果能够把每一个点都当作根来计算...原创 2018-10-03 23:54:57 · 581 阅读 · 1 评论 -
牛客练习赛28 D 随风飘(dp + 字符串哈希)
能用字符串哈希解决的问题,千万别用后缀数组、字典树什么的了……这题有很多个询问,每次询问是从n个中拿走k个字符串,问拿走之后的答案。我们显然不能把所有拿走的方案枚举一遍,所以考虑计算每一个字符串的贡献。这里我的贡献指第i个字符串与它前面的字符串的贡献。而这个贡献就是计算当前串与前面所有串的lcp。这里千万不要看到lcp就去想后缀数组,这里是多个串的lcp,而不是一个串的l...原创 2018-10-07 10:39:22 · 311 阅读 · 0 评论 -
WannaFly挑战赛 28 C msc的宠物(二分答案 + 树形dp)
题意相当于是把一棵树分为k+1个部分,然后使得这么多个部分的极差最大值最小。首先考虑直接树形dp,由于是在讨论极差,所以我们要想办法表示极差的状态,但是我们发现仅仅用状态表示极差,并不能够很好的转移,而且极差本身也不好表示。在转移的时候,满足一个子树的极差最小值,在考虑别的节点的时候可能并不是最小值,也就是说子问题是有后效性的,这也就意味这直接用dp是做不了的。所以...原创 2018-11-10 13:03:24 · 670 阅读 · 2 评论 -
牛客练习赛31 C 无畏死灵术士莉莲娜与锁链面纱(dfs + 期望dp)
太久没有做期望/概率dp,已锈。。。大概就是说给你一个1到n的全排列,然后每次随机选择一个数字在不改变其他数字相对位置的前提下,把比他小的数字放在他前面,大的在后面。问期望几次能够使得这个序列有序。由于是求期望,所以显然是要倒着求。令dp[x]表示状态x下变得有序的期望步数。那么显然有转移方程: ...原创 2018-11-17 00:25:13 · 338 阅读 · 0 评论 -
CodeForces 438E The Child and Binary Tree(DP + 生成函数 + 多项式模运算)
大致题意:给定一个集合{Cn},一棵二叉树上的所有节点的点权值从这个集合中选取。现在给定一个m,问对于1..m中的每一个数字i,权值和恰好为i的不同的二叉树的个数有多少个。这里形态不同但点权集合的二叉树视为两种方案。与前面做的题目类似,这种题目我们还是用dp的思维去考虑。令fi表示权值和为i的二叉树的个数。那么考虑增加一个点x,这个点的权值可以取i,Ci表示数值i在初始...原创 2018-12-26 22:53:00 · 306 阅读 · 0 评论 -
CodeForces 1096F Inversion Expection(树状数组 + DP + 组合计数)
好久没有做一道这么对胃口的题了……大致题意:给出一个1..n的全排列,但是其中有些数字被替换成了-1。我们设给出数列中-1的个数为x,那么原来的全排列就有x!种,而且告诉你取这x!种每一种的概率相等,现在问你原排列的逆序对的期望是多少。很显然,这个数列分为两个部分,一个部分是已经给出的正整数,另一部分是-1。那么相应的,逆序对可以分为三个部分,一个是正整数部分内部逆序对...原创 2018-12-29 16:40:51 · 468 阅读 · 0 评论