BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学
问题描述
本题的一些心得
对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化。
设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推导式子,可以使得做题过程更加有条理。
一个拥有良好科学素养的人,一定是有条理的 ——李理
题解
对于本题,发现如果最后对答案除以 \(m!\),则可以使得集合 「有序化」 。
对于一个满足要求的方案,必须满足以下 \(3\) 个条件:
-
没有互相重复的集合
-
没有空集
-
集合中的每个元素都必须出现偶数次
设 \(dp[i]\) 代表满足以上三个限制条件时的方案数。
对于三个限制条件分开考虑。
首先,对于条件 \(3\) ,只要知道 \(dp[1],dp[2],\cdot,dp[i-1]\) ,就可以推出 \(dp[n]=A_{2^n-1}^{i-1}\) 。
对于条件 \(1\) ,假设集合 \(j\) 与集合 \(i\) 重复,则 \(j\) 有 \(i-1\) 种取法,\(i\) 有 \(2^n-1-(i-2)=2^n-i+1\) 种取法,本处去掉的贡献为 \(dp[i-2] \times (n-1) \times (2^n-i+1)\) 。
对于条件 \(2\) ,如果有空集,则前 \(i-1\) 个符合条件,去掉贡献 \(dp[i-1]\) 。
\(\mathrm{Code}\)
调试中,码力不行,甘拜下风