zoukankan      html  css  js  c++  java
  • 简简单单组合数学

    简简单单组合数学

    P3158 [CQOI2011]放棋子

    (uparrow) 假组合数学,真 ( ext{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) 个点都不连通,那么显然这是一个非联通图。

    同时枚举 (1le jle n-1) ,使 (j-1) 个节点连为 (1) 个大小为 (j) 的连通块,选出的方案数为 (inom{n-1}{j-1}) ,选出后的连通块方案数有 (dp[j]) 种。

    剩下的 (n-j) 个点随便连边,由 (inom{n-j}{2}) 种情况,而且这些点与前面 (j) 个点没有任何变相连,保证不连通。

    于是递推方程为:

    [dp[n]=dbinom{n}{2}-sum_{j=1}^{j<n}{dp[j] imes dbinom{n-1}{j-1} imes dbinom{n-j}{2}} ]

  • 相关阅读:
    JavaScript节点属性
    main函数的参数
    CGI
    open()函数 linux中open函数使用
    海伦公式
    C语言字符串操作函数
    makefile(一)
    makefile
    第一天
    时间小憩
  • 原文地址:https://www.cnblogs.com/EricQian/p/15057451.html
Copyright © 2011-2022 走看看