zoukankan      html  css  js  c++  java
  • 期望

    看了几个课件,挑着比较有意思的写了。

    1.

    倒推期望,设(dp[i][j])为已经有(i)(j)列有至少一个被染色的,还需要染的次数的期望。
    那么有(dp[n][n]=0),倒推到初始状态即可。
    有:

    [dp[i][j]=frac{ij}{n^2}dp[i][j]+frac{(n-i)j}{n^2}dp[i+1][j]+frac{i(n-j)}{n^2}dp[i][j+1]+frac{(n-i)(n-j)}{n^2}dp[i+1][j+1] ]

    所以:

    [dp[i][j]=frac{n^2+(n-i)jdp[i+1][j]+i(n-j)dp[i][j+1]+(n-i)(n-j)dp[i+1][j+1]}{n^2-ij} ]

    这样我们(O(n^2))(dp)就可以了。

    2.

    先考虑黑点的贡献。
    (dp[i])表示从(i)开始走到结束经过黑点的期望个数。
    有:

    [dp[x]=[col[x]=black]+[d[x]>1]frac{1}{d[x]}sumlimits_{(x,t)in E}dp[t] ]

    这样转移出现了环。
    发现可以不用高斯消元而系数递推。
    得到:

    [dp[x]=k[x]dp[f]+b[x] ]

    然后我们解一下得到:

    [egin{aligned} dp[x]&=[col[x]=black]+[d[x]>1]frac{1}{d[x]}sumlimits_{(x,t)in E}dp[t]\ &=[col[x]=black]+[d[x]>1]frac{1}{d[x]}dp[f]+[d[x]>1]frac{1}{d[x]}sumlimits_{(x,t)in E}dp[t]\ &=k[x]dp[f]+b[x]\ k[x]&=[d[x]>1]frac{1}{d[x]}\ b[x]&=[col[x]=black]+[d[x]>1]frac{1}{d[x]}sumlimits_{(x,t)in E}dp[t]\ end{aligned} ]

    这样可以叶子向根进行系数递推了。
    复杂度是线性的。
    然后我们考虑白色点的贡献。
    其实就是经过一个白点的概率。
    对于每一个白点,我们去掉其所有儿子并把它染黑,其他点全都染白,这样转化成和刚才一样的问题了。再利用一下系数递推时候求出的(k,b)就可以线性的统计这一部分的答案了。

    3.

    这个题的话。
    考虑把链变成圆,加一个点为(n+1),那么就相当于是从(n+1)出发,选择顺逆时针,在选择一个点作为起点,不能够走回(n+1)这个点的方案数。
    那么总方案是((2(n+1))^m),而每一个位置被占据的概率是相同的,是(frac{m}{n+1})
    那么答案就是:((2(n+1))frac{n+1-m}{n+1})

    4.

    我们发现这(m)个人很讨厌。我们假设(1)(1)位置,那么最终答案乘上(2^n)即可。
    然后考虑每次和(1)所在区间合并的区间总共有(n)个。
    这些区间中最小的那个数将会和(1)对战,我们要求这些区间的最小数没有任何一个是(m)中的某个人。
    这样我们求:(f(S))表示(S)集合所代表区间中的所有人的最小值是(m)个人之一,剩下的区间生死未卜的方案数。
    我们把(m)个人排个序然后从大到小依次做(dp)
    (dp[i][S])为前(i)大的人中集合(S)的区间中的最小值必然是(m)个人之一,而剩下的区间生死未卜的方案数。
    枚举两种转移。
    1.不放入集合中。
    2.加入新出现的集合作为最小值。
    转移就是:

    [dp[i][S]=dp[i+1][S]+sumlimits_{kin ot S}dp[i+1][S-2^k]inom{2^n-a[i]-S+2^k}{2^{k}-1}(2^k)! ]

    这样我们就得到了:

    [f(S)=dp[1][S](2^n-S-1)! ]

    考虑用(f(S))来求答案。
    那么就有:

    [ans=sumlimits_{Ssubseteq U}(-1)^{|S|}f(S) ]

    5.

    (dp[i][j])为前(i)个数,第(i)个数为(j)的方案数。

    [dp[i][j]=sumlimits_{k=1}^{m}dp[i][j]-sumlimits_{k=1}^{m}[k= ot j]dp[i-a[j]-1][k] ]

    相当于容斥掉一整段全都是(j)的长度过于长的方案。
    那么发现(a_i)相同的(i)可以一起转移,复杂度就变成(O(n^2))的了。

    6.

    相当于求出(nk)个数中选择(x)个数((x equiv r(mod k))),的方案。
    (dp[i][j])(i)个数中选了(x)个数,满足(x equiv j(mod k))的方案数。
    发现可以用矩阵优化这个(dp),那么矩阵快速幂一下就可以了。

    7.

    这个感觉是挺常见的计数题的。
    对于(k=1),(ans=n)
    如果(k>1)
    我们考虑一个长度为(l)的路径,那么其对答案的贡献是(inom{l-2}{k-2})
    这样我们先求一下数上长度为(i)的方案数,点分治+(FFT)就可以了,设其生成函数为(G(x)=sumlimits_{i=1}^{n}g(i)x^i)
    那么我们设答案的生成函数是(F(x)=sumlimits_{i=1}^{n}f(i)x^i)
    这样就有(f(i)=sumlimits_{j=i}^{n}g(j)inom{j-2}{i-2})
    拆一下发现是卷积形式。
    再做一次(FFT)就可以了。

  • 相关阅读:
    微信小程序之文件(图片)使用MD5加密(二)
    微信小程序之文件(图片)使用MD5加密(一)
    02-Django简介
    01-Web框架的原理
    15-pymysql模块的使用
    06-数据类型
    05-表的操作
    04-库的操作
    03-初始mysql语句
    02-MySql安装和基本管理
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12730833.html
Copyright © 2011-2022 走看看