• 2017ICPC西安 LOL(dfs+剪枝)


    首先要抽象出模型,我们其实只需要管自己选啥英雄就行,因为这是有限制的,其他的直接使用组合数计算之后乘上就行

    对于自己选的英雄,有5层,每层100个,最朴素的想法是枚举每人选什么,但是5层for循环超时了,但是4层for循环就很合理

    因此我们只枚举前4层,之后看看第五层还能选啥就行。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int inf=0x3f3f3f3f;
    const int N=2e5+10;
    const int mod=1e9+7;
    string s[N];
    ll ans;
    int st[N];
    ll tmp;
    int sum;
    int dis[N];
    void dfs(int u){
        int i;
        if(u==5){
            ans=(ans+sum)%mod;
            for(i=1;i<=4;i++){
                if(s[5][dis[i]]=='1')
                    ans--;
            }
            ans=(ans+mod)%mod;
            return ;
        }
        for(i=1;i<=100;i++){
            if(s[u][i]=='1'&&!st[i]){
                st[i]=1;
                dis[u]=i;
                dfs(u+1);
                st[i]=0;
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        while(cin>>s[1]){
            sum=ans=0;
            s[1]=" "+s[1];
            memset(dis,0,sizeof dis);
            memset(st,0,sizeof st);
            int i;
            for(i=2;i<=5;i++){
                cin>>s[i];
                s[i]=" "+s[i];
            }
            for(i=1;i<=100;i++){
                if(s[5][i]=='1')
                    sum++;
            }
            dfs(1);
            cout<<ans*531192758%mod<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    flume 安装过程记录
    hive 动态分区插入
    hive 数据导入
    scala 学习笔记
    hive 日志
    Linux下设置和查看环境变量
    数据结构(4):图解递归调用机制
    使用数据结构栈实现表达式计算器
    数据结构(3):java使用数组模拟堆栈
    使用Vue和Element-ui的cdn模式临摹一个后台框架
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13512266.html
Copyright © 2020-2023  润新知