zoukankan      html  css  js  c++  java
  • swust oj 2516 教练我想学算术 dp+组合计数

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<string>
    #include<queue>
    #include<cmath>
    #include<map>
    #include<algorithm>
    #include<vector>
    //#define debug
    using namespace std;
    const int inf = 0x3fffffff;
    const int mod = 1000000007;
    const int mmax  = 1000010;
    typedef long long LL;
    int n,m,k;
    LL inv[mmax];
    LL jie[mmax];
    LL dp[1100];
    void pre()
    {
        inv[0]=inv[1]=1;
        jie[0]=jie[1]=1;
        for(int i=2;i<mmax;i++)
        {
            inv[i]=(LL)(mod-mod/i)*inv[mod%i]%mod;
            jie[i]=jie[i-1]*i;
            jie[i]%=mod;
        }
        for(int i=2;i<mmax;i++)
        {
            inv[i]*=inv[i-1];
            inv[i]%=mod;
        }
    
    }
    LL Pow_mod(LL x ,int n)
    {
        LL res=1,tmp=x;
        for(;n;n/=2)
        {
            if(n&1)
                res=(res*tmp)%mod;
            tmp=(tmp*tmp)%mod;
        }
        return res;
    }
    LL C(int x,int y)
    {
        if(y>x)
            return 0;
        return jie[x]*inv[y]%mod*inv[x-y]%mod;
    }
    void build()
    {
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++)
        {
            dp[i]=Pow_mod(i,n);
            for(int j=1;j<i;j++)
            {
                dp[i]-=dp[i-j]*C(i,j)%mod;
                dp[i]=(dp[i]%mod+mod)%mod;
            }
        }
    }
    int main()
    {
        pre();
        while(~scanf("%d %d %d",&n,&m,&k))
        {
            if(m==1)
            {
                printf("%lld
    ",Pow_mod(k,n));
                continue;
            }
            build();
            LL cnt=0;
            for(int i=0;i<=n;i++)
            {
                for(int j=0;i+j<=n;j++)
                {
                    LL tmp=1;
                    tmp=C(k,i)*C(k-i,j)%mod*C(k-i-j,j)%mod;
                    tmp*=dp[i+j]*dp[i+j]%mod*Pow_mod((LL)i,n*(m-2))%mod;
                    tmp%=mod;
                    cnt+=tmp;
                    cnt%=mod;
                }
            }
            printf("%lld
    ",cnt);
        }
        return 0;
    }
    

  • 相关阅读:
    最热CPLDFPGA论坛
    DSP Builder开发环境安装
    math.h数学函数库
    (转)Fast Input/Output Registers约束
    用EXCEL去掉最高最低数,网上看到,觉得不错
    GMS6.5.3有0DAY的下载了
    [转]为ArcGIS制作符号
    Total Commander 7.5Beta1的便携版
    关于CAD的一个小发现
    可恶的AP PDF password recovery
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6940451.html
Copyright © 2011-2022 走看看