简简单单组合数学
P3158 [CQOI2011]放棋子
\(\uparrow\) 假组合数学,真 \(\text{DP}\) 。
\(f[i][j][k]\) : 用了 \(i\) 行 \(j\) 列,涂了前 \(k\) 种颜色的方案数。
\(g[i][j][k]\) : 用了 \(i\) 行 \(j\) 列,涂了第 \(k\) 种颜色的方案数(用来辅助 \(f\) 数组转移)。
见代码
n 个点的联通图数量
设 \(dp[i]\) 表示 \(i\) 个点的时候的答案。
我们假设已经计算好了 \([1,n-1]\) 的情况,现在要将第 \(n\) 号点加入。
“正难则反”,我们考虑 \(n\) 个点的非联通图的数量。
假定 \(n\) 号点与之前的 \(n-1\) 个点都不连通,那么显然这是一个非联通图。
同时枚举 \(1\le j\le n-1\) ,使 \(j-1\) 个节点连为 \(1\) 个大小为 \(j\) 的连通块,选出的方案数为 \(\binom{n-1}{j-1}\) ,选出后的连通块方案数有 \(dp[j]\) 种。
剩下的 \(n-j\) 个点随便连边,由 \(\binom{n-j}{2}\) 种情况,而且这些点与前面 \(j\) 个点没有任何变相连,保证不连通。
于是递推方程为:
\[dp[n]=\dbinom{n}{2}-\sum_{j=1}^{j<n}{dp[j]\times \dbinom{n-1}{j-1}\times \dbinom{n-j}{2}} \]