zoukankan      html  css  js  c++  java
  • $[Luogu]$ 洛谷 $CF908D$ 题解【New Year and Arbitrary Arrangement】

    emmm,居然没有提解,本蒟蒻来一本正经地发一篇

    这是一个神奇的DP,不过用来练一下期望DP也是很好的

    有助理解嘛~~~

    我们不妨设f[i][j]为前缀中i个a,j个ab停止后的期望长度,这样我们转移起来就方便多啦QAQ

    丢方程:f[i][j]=(pa*f[i+1][j]+pb*f[i][i+j])/(pa+pb)f[i][j]=(paf[i+1][j]+pbf[i][i+j])/(pa+pb)

    但我们神奇的发现,这一题居然要取模QAQ

    丧尽*良

    于是我们一脸怨气地去学逆元1/逆元2

    呼~~~终于学完逆元惹,然而我们惊奇地(di)发现,这一题竟然变得不难了QAQ

    好啦,粘代码

    #include<bits/stdc++.h>
    using namespace std;
    int k,pa,pb;
    int A,B;
    int f[1005][1005];
    const int p=1000000007;
    inline int ksm(int b,int pp)
    {
        pp--;
        int a=b;    
        while(pp>0)
        {
            if(pp%2==1) a=(b*a)%p;
            b=(b*b)%p;
            pp/=2;
        }
        return a%p;
    }
    int dp(int i,int j)
    {
        if(i+j>=k) return (i+j+1LL*pa*ksm(pb,p-2)%p)%p;
        if(f[i][j]!=0x3f3f3f3f) return f[i][j];
        return f[i][j]=(1LL*((1LL*pa*dp(i+1,j))%p+(1LL*pb*dp(i,i+j))%p)*ksm(pb+pa,p-2))%p;
    }
    int main(){
        cin>>k>>pa>>pb;
        memset(f,0x3f3f3f3f,sizeof(f));
        cout<<dp(1,0);
    }

    后话:我当时觉得DP太难打了,就去打了记搜QAQ

    其实是我不会打DP

    有想要DP型题解的找Itst大佬

    不要想着抄题解哦,我可是做了一些修改的呢(程序主体上无误,但是会让你WA而不是CE)

  • 相关阅读:
    Go语言如何判断是否是零值
    世界、中国大事记(古代时间线)
    微服务架构带来的分布式单体
    golang如何优雅的编写事务代码
    项目管理的一些知识
    高并发葵花宝典
    深度学习-常见神经网络
    教你用Cobra开发类似docker的命令行
    深度学习是什么
    人工神经网络是什么
  • 原文地址:https://www.cnblogs.com/wo-shi-zhen-de-cai/p/9787504.html
Copyright © 2011-2022 走看看