zoukankan      html  css  js  c++  java
  • 二项式反演

    题解:

    https://www.cnblogs.com/cjyyb/p/10142878.html

    $$f(i)=sumlimits_{i=k}^{n} { C_n^i *g(i)} ag 1$$ 

    可以反演出 

    $$g(i)=sumlimits_{i=k}^{n} {{(-1)}^{n-i}* C_{n}^{i}} ag 2$$

    具体证明只需要把2式的f用1式带入即可 懒得写了

    例题1:错排

    设$f(x)$为x个元素的全排列 $f(x)=x!$ $g(x)$为x个元素的错排

    $$f(n)=sumlimits_{i=0}^{n} { C_n^i *g(i) } $$

    然后这个就是上面那个式子,于是可以反演出

    $$g(n)=sumlimits_{i=0}^{n} { {(-1)}^{n-i} * C_n^i * f(i) }$$

    $$g(n)=n! * sumlimits_{i=0}^{n} { frac{{(-1)}^{i}} {i!} }$$

    例题2:染色问题

    有$1×n$的一排格子,有$m$种颜色,每个格子染一个颜色,相邻格子颜色不能相同,每种颜色都至少被用到$1$次,求染色方案数。

    比较容易想到的是$f[i][j]$表示染前i个用了j种颜色的方案输

    $f[i][j]=f[i-1][j-1]*(n-j+1)+f[i-1][j]*(j-1)$ 这样子是$nm$的

    考虑一种更快的算法

    这题直接容斥是没法做的,我们并不能算出至少有k个相邻位置相同的方案输

    令$f(x)$表示用$<=x$种颜色,相邻不同 g(x)$表示正好用x种颜色,相邻不同

    显然$f(m)=m!*{(m-1)}^{n-1}$

    $$f(m)=sumlimits_{i=1}^{m} { g(i)* C_m^i }$$

    那么这个就可以反演了

  • 相关阅读:
    寻找大富翁
    C++ STL sort()函数用法
    众数
    平方因子
    Hdu 1089 A+B for Input-Output Practice (I)
    Hdu 1090 A+B for Input-Output Practice (II)
    Hdu 1083 Courses
    Hdu 1069 Monkey and Banana
    Hdu 1062 Text Reverse
    Hdu 1068 Girls and Boys
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/10189179.html
Copyright © 2011-2022 走看看