zoukankan      html  css  js  c++  java
  • LOL UVALive

    #include <bits/stdc++.h>
    using namespace std;
    /*
    题意有点模糊不全,敌方选人如何选不知道
    我们假设敌方选人和我方选人一样,选的顺序不一样,即使选的英雄一样也不行
    
    禁英雄,只要禁的一样,那么就说是同一种情况
    那么此题就转成排列组合
    
    我方先选出人来,然后乘A(95,5)*C(90,5)*C(85,5)
    
    如何计算我放选人的组合数
    状压dp
    dp[i][j]表示选到第i个英雄,我方五人是否选人的情况为j时排列组合数
    j转换成二进制来表示五人的选人情况,1代表选人了,0代表没选
    
    两种情况
    选这个英雄
    if(j&1<<k&&s[k][i])
    dp[i][j]=max(dp[i][j],dp[i-1][j^(1<<k)]+dp[i][j])%mod;
    
    不选
    dp[i][j]=max(dp[i][j],dp[i][j]+dp[i-1][j])%mod;
    
    */
    typedef long long ll;
    const int maxn=109;
    ll dp[maxn][(1<<5)+10];
    int s[6][maxn];
    ll mod=1000000007;
    ll A(ll n,ll m)
    {
        ll sum=1;
        for(ll i=n; i>n-m; i--)
            sum=sum*i;
        return sum;
    }
    ll C(ll n,ll m)
    {
        ll sum=1;
        for(ll i=1; i<=m; i++)
            sum=sum*(n-i+1)/i;
        return sum;
    }
    int main()
    {
        //多组样例输入呀
        while(~scanf("%1d",&s[1][1]))
        {  for(int j=2;j<=100;j++)scanf("%1d",&s[1][j]);
            for(int i=2; i<=5; i++)
                for(int j=1; j<=100; j++)
                    scanf("%1d",&s[i][j]);
            memset(dp,0,sizeof(dp));
            for(int i=0;i<5;i++)
                if(s[i+1][1])dp[1][1<<i]=1;
            dp[1][0]=1;
            //dp[0][0]=1;//两种方式都可以
            for(int i=2; i<=100; i++)
                for(int j=0; j<(1<<5); j++)
                {
                    for(int k=0; k<5; k++)
                    {
                        if((j&(1<<k))&&s[k+1][i])
                            dp[i][j]=(dp[i-1][j^(1<<k)]+dp[i][j])%mod;
                    }
                    dp[i][j]=(dp[i][j]+dp[i-1][j])%mod;
                }
            ll ans=dp[100][(1<<5)-1];
            ans=(ans*A(95,5))%mod*((C(90,5)%mod*C(85,5))%mod);
            printf("%lld
    ",ans%mod);
        }
        return 0;
    }
  • 相关阅读:
    MySQL补充
    不同操作系统下虚拟环境的搭建
    Python导学基础(二)变量与基础数据类型
    Python导学基础(一)介绍
    KM 算法
    题解-CF1065E Side Transmutations
    题解-CF1140E Palindrome-less Arrays
    题解-CF677D Vanya and Treasure
    splay文艺平衡树
    splay区间操作(bzoj1500)
  • 原文地址:https://www.cnblogs.com/zhangzhenjun/p/11779248.html
Copyright © 2011-2022 走看看