zoukankan      html  css  js  c++  java
  • 【Luogu】P2490黑白棋(博弈DP)

      题目链接

      题解链接

      

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #include<cctype>
    #define mod 1000000007
    #define maxn 10020
    using namespace std;
    inline long long read(){
        long long num=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')    f=-1;
            ch=getchar();
        }
        while(isdigit(ch)){
            num=num*10+ch-'0';
            ch=getchar();
        }
        return num*f;
    }
    
    long long mul[maxn];
    long long inv[maxn];
    long long f[21][maxn];
    
    inline long long Pow(long long a,long long b){
        long long ret=1;
        while(b){
            if(b&1)    ret=ret*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return ret;
    }
    
    inline long long C(long long n,long long m){
        return (mul[n]*inv[m]%mod)*inv[n-m]%mod;
    }
    
    int main(){
        int n=read(),e=read()>>1,w=read();    mul[0]=inv[0]=1;
        for(int i=1;i<=n;++i){
            mul[i]=mul[i-1]*i%mod;
            inv[i]=Pow(mul[i],mod-2);
        }
        f[0][0]=1;
        for(int i=0;i<=14;++i){
            for(int j=0;j<=n-(e<<1);++j){
                //printf("%d %d
    ",i,j);
                for(int k=0;k*(w+1)<=e&&j+k*(w+1)*(1<<i)<=n-(e<<1);++k){
                    long long &now=f[i+1][j+k*(w+1)*(1<<i)];
                    now=(now+f[i][j]*C(e,k*(w+1)))%mod;
                }
            }
        }
        long long ans=0;
        for(int i=0;i<=n-(e<<1);++i)    ans=(ans+f[14][i]*C(n-i-e,e))%mod;
        printf("%lld
    ",(C(n,e<<1)-ans+mod)%mod);
        return 0;
    }
  • 相关阅读:
    Java 编程基础
    LING 实战
    C# 3.0\3.5 新特性
    EF Code First 入门
    C# 4.0 新特性
    JavaScript学习(二)
    JavaScript学习(一)
    csdn的blog后台程序的导航菜单的实现
    HashTable的遍历
    开通啦
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/8978500.html
Copyright © 2011-2022 走看看