首页 > 其他分享 >树形限制的排列生成dp

树形限制的排列生成dp

时间:2024-10-24 12:43:54浏览次数:6  
标签:排列 限制 容斥 生成 树形 dp

对于这类树形限制的生成排列的题记录两种不同的做法

\(\color{blue}\textbf{[例题]}\)

第一种方法(暴暴暴暴暴力dp)
P4099 [HEOI2013]SAO
P3757 [CQOI2017]老C的键盘

第二种方法(容斥+dp)
P5405 [CTS2019] 氪金手游

题面

生成一个大小为 n 的排列,满足 n-1 条形如 p[x]>p[y] 的限制,且这些限制恰好能构成一棵树,求方案数。

第一类做法

这种做法比较垃圾,处理不了带权生成排列
f[i][j] 表示在只考虑 i 的子树内的限制,生成了一个大小为 siz[i] 的排列,且在排列中树根 i 是排列中第 j 个,满足这个要求的排列有多少个,然后就是暴力转移,每次考虑不断加入子树,然后就像插数一样把别的子树的排列插到原排列上,系数就是个组合数什么的,前缀和优化一下就是 \(O(n^2)\) 的。没错,很暴力。

第二类做法(容斥)

回到刚才那个问题,假如树形结构是一棵内向树(外向树亦可)那么会怎么样?就意味着树根 i 在其子树构成的排列中一定是第一个,而子树之间没有限制直接组合数乱插就行了,十分的好算。考虑不是内向树,那么在合并子树的时候我要满足若干个树根 i 与其儿子 v=son[i] 之间的限制,直接开始大力容斥,我只关心那些从 i 指向儿子的边,称之为反向边,我反过来就变成了:
①一定违反了这个限制
②可能违反了这个限制(就是把这条边删掉)
这样直接容斥就变成了至多 \(O(2^{n-1}n)\) 的,但是可以考虑优化,我容斥的话我关心的容斥系数实际上只与我强制多少违反了这个限制的个数有关,那么我 dp 的时候再开一维来记录我目前有多少个限制是强制违反的,这样是 \(O(n^3)\) 的,但是再仔细思考一下,我 dp 的时候如果强制违反限制,那么就是给我当前的 dp 值乘以一个 \(-1\) ,因此我就不用多记一维,我可以在转移的时候直接在 dp 数组上操作,这个真的非常神奇,时间复杂度变成了 \(O(n^2)\) ,而且还能处理带权生成排列,每个带权只在其作为根的地方插进去即可,非常的 useful

标签:排列,限制,容斥,生成,树形,dp
From: https://www.cnblogs.com/chenhx-xcpc/p/18499365

相关文章

  • 树覆盖型dp
    遇到做过的题不会做,以后要好好改题......
  • 线性 DP
    最长上升子序列问题是一个经典的线性动态规划问题。例题:B3637最长上升子序列分析:设原始数组为\(a\),定义状态\(dp_i\)表示以\(a_i\)结尾的上升子序列的最大长度。注意这个状态定义中有两个重点,第一个重点是\(dp_i\)只维护所有原始序列中以\(a_i\)结尾的上升子序列的信......
  • 排列组合问题之圆形分布
    1、问题1.1团团坐有一张圆桌,坐了A,B,C,D四个人,已知,D在A的右边,C在D的对面,请问A,B,C,D,的坐次?解答:这个问题相对简单,我们纸上画一画,就能画出他们的可能的位置了但是,可能还有一种解,比如我们把A,B,C,D依次右转一个位,也是满足条件的,而且只要保持他们的相对位置不变,依次右转n个......
  • 排列组合之线性排列
    1、问题1.1袋中取球袋子里有4个球,分别编号为{1,2,3,4},依次取出,按照取出的先后从左至右排列,会得到一个不同的数字(如1234,有点像双色球开奖),求输出所有的数字组合。1.2不重复的数有4个数字{0,1,2,3},问用这4个数字能组成多少种不能的4位数(0123也算,因为我们也可......
  • 数位dp
    数位dp本质是记忆化搜索。\(lim\)为\(1\),表示当前位之前都是最大的数,当前位的大小受限制,不是1~9,是1~up。\(zero\)为\(0\),表示这一位之前为前导0。\(lim\)的转移:lim&&(i==up)。\(zero\)的转移:zero||i。例题1P2602[ZJOI2010]数字计数给定\(a\)和\(b\),......
  • 概率DP
    概率DP是DP中一个非常重要且较难的DP类型。其题型灵活多变,尤其爱与树形DP结合,同时很可能需要各种数据结构优化。其主要考点便是DP方程的建立与维护。由于“概率”二字,许多时候分类讨论与小数运算也是不可避免的。因此,概率DP对选手的逻辑思维与代码能力也有很高的要求,可以说是DP......
  • AtCoder DP Contest 速通指南
    题单链接这是AT之前办的一场DP专题,里面都是很经典的问题,可以帮助大家复习DP的套路,个人感觉对于巩固基础来说质量很高,建议大家去去联系一下,尽量不要看题解。本博客只讨论了绿色及以上难度的题目,下面是我的题解。ICoins设\(f_{i,j}\)表示扔到了第\(i\)个,有\(j\)个......
  • TCP与UDP协议
    (1)TCP协议面向连接、可靠、基于字节的传输,IP报头中协议号为6。一般用于对可靠性要求较高的应用。(2)UDP协议无连接、不可靠、基于报文的传输,IP报头中协议号为17。主机不需维持连接状态具有较高的传输效率,可靠性由应用层来提供。TCP报头结构①源端口和目的端口:传输层与......
  • 杭州 Day 4 上午 状压 dp
    状压一类杂题P1896[SCOI2005]互不侵犯先预处理出一行的所有可能状态\(S\),应当满足\(S\&(S≫1)=0\),因为不能有相邻的国王。用\(f(i,S,j)\)表示考虑了前\(i\)行,第\(i\)行的状态是\(S\),当前已经放了$$个国王的方案数。转移直接枚举第\(i−1\)行的状态\(T......
  • 提高组专题 dp4
    A[PA2021]OddeskidodeskiDP挺显然的,但我推错了……。\[\begin{split}dp_{i+1,j,1}&+=\sum(dp_{i,j,1}+dp_{i,j,0})\timesj\\dp_{i+1,j+1,0}&+=\sumdp_{i,j,1}\times(m-j)\\dp_{i+1,j,0}&+=\sumdp_{i,j,0}\times(m-j)\end{split}\]#include&......