• CF708E Student's Camp


    Link
    (f_{i,j,k})表示只考虑前(i)行,这(i)行都连通,且第(i)行剩下的瓷砖区间为([j,k])的概率。
    不难得到转移(f_{i,j,k}=p_{j,k}sumlimits_{[l,r]cap[j,k] eemptyset}f_{i-1,l,r})
    其中(p_{j,k})为某一行剩下瓷砖区间为([j,k])的概率。
    (q_i)表示某一侧的瓷砖少了(i)个的概率,那么(q_i={kchoose i}P^i(1-P)^{k-i}),且(p_{j,k}=q_{j-1}q_{m-k})
    直接前缀和优化转移需要(O(nm^2))的时间复杂度,不太能过。
    (g_{i,k}=sumlimits_{jle k}f_{i,j,k},h_{i,j}=sumlimits_{lle rle j}f_{i,l,r}=sumlimits_{kle j}g_{i,k}),那么我们要求的答案就是(h_{n,m})
    我们有一个很好地性质是(f_{i,j,k}=f_{i,m-k+1,m-j+1}),那么随便画个图容斥一下可以得到

    [f_{i,j,k}=p_{j,k}sumlimits_{[l,r]cap[j,k] eemptyset}f_{i-1,l,r}=p_{j,k}(h_{i-1,m}-h_{i-1,j-1}-h_{i-1,m-k}) ]

    [egin{aligned} g_{i,r}&=sumlimits_{lle r}f_{i,l,r}\ &=sumlimits_{lle r}p_{l,r}(h_{i-1,m}-h_{i-1,l-1}-h_{i-1,m-r})\ &=d_{m-r}(sumlimits_{lle r}d_{l-1}(h_{i-1,m}-h_{i-1,m-r})-sumlimits_{lle r}d_{l-1}h_{i-1,l-1}) end{aligned} ]

    前缀和优化即可。

    #include<cstdio>
    using i64=long long;
    const int N=1507,K=100007,P=1000000007;
    i64 fac[K],ifac[K],pwp[K],qwq[K],d[K],sd[N],g[N][N],h[N][N],sum[N][N];
    int read(){int x;scanf("%d",&x);return x;}
    i64 C(int n,int m){return fac[n]*ifac[m]%P*ifac[n-m]%P;}
    i64 pow(i64 a,int b){i64 r=1;for(;b;b>>=1,a=a*a%P)if(b&1)r=r*a%P;return r;}
    int main()
    {
        int n=read(),m=read(),a=read(),b=read(),k=read(),pr=a*pow(b,P-2)%P,qr=(P+1-pr)%P;
        fac[0]=1;for(int i=1;i<=k;++i) fac[i]=i*fac[i-1]%P;
        ifac[k]=pow(fac[k],P-2);for(int i=k;i;--i) ifac[i-1]=i*ifac[i]%P;
        pwp[0]=1;for(int i=1;i<=k;++i) pwp[i]=pr*pwp[i-1]%P;
        qwq[0]=1;for(int i=1;i<=k;++i) qwq[i]=qr*qwq[i-1]%P;
        for(int i=0;i<=k;++i) d[i]=C(k,i)*pwp[i]%P*qwq[k-i]%P;
        for(int i=1;i<=m;++i) sd[i]=(sd[i-1]+d[i-1])%P;
        g[0][m]=h[0][m]=1;for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) g[i][j]=(sd[j]*(h[i-1][m]-h[i-1][m-j]+P)-sum[i-1][j]+P)%P*d[m-j]%P,h[i][j]=(h[i][j-1]+g[i][j])%P,sum[i][j]=(sum[i][j-1]+d[j-1]*h[i][j-1])%P;
        printf("%lld",h[n][m]);
    }
    
  • 相关阅读:
    Thinkphp无法加载验证码 undefined function Thinkimagettftext() 解决方案 mac系统
    fragment使用不当 导致java.lang.IllegalStateException
    怎样从GitHub项目中,下载单个文件夹或文件
    Android 5.0 app样式
    OpenCV fitline直线拟合函数学习
    Linux文件系统
    Ubuntu 12.04 笔记本触摸板失灵解决方法
    利用微软测试工具PICT生成测试用例
    Myeclipse 使用JUnit 进行单元测试
    Myeclipse 2014 安装checkstyle、PMD和Metrics
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/13035388.html
Copyright © 2020-2023  润新知