zoukankan      html  css  js  c++  java
  • 天梯赛 球队“食物链”

    https://pintia.cn/problem-sets/994805046380707840/problems/994805048175869952

    搜索,状压判重

    f[s][i]:状态为s,i为最后一个

    用f记录某个状态是不是已经不合法了

    因为对于一个有x位的状态t,确定好最后一个,有(x-1)!种方式搜索的这一状态

    因为只有最后一个才会影响后面,所以他们的后效性都是一样的

    #include<cstdio>
    
    using namespace std;
    
    int n,full;
    char s[21][21];
    
    int ans[21]; 
    
    int f[1100000][20];
    
    bool tag;
    int m;
    
    void dfs(int first,int now,int state)
    {
        if(state==full)
        {
            if(s[now][first]!='W' && s[first][now]!='L')
            {
                f[state][now]=-1;
                return;
            }
            tag=true;
            ans[++m]=now;
            return;
        }
        f[state][now]=1;
        int ns;
        for(int i=1;i<=n;++i)
            if(!(state&(1<<i-1)))
            {
                if(s[now][i]=='W' || s[i][now]=='L')
                {
                    ns=state|(1<<i-1);
                    if(f[ns][i]==-1) continue;
                    dfs(first,i,ns);
                    if(!tag) f[ns][i]=-1;
                    else
                    {
                        ans[++m]=now;
                        return;
                    }
                } 
            }
        
    }
    
    int main()
    {
        scanf("%d",&n);
        full=(1<<n)-1;
        for(int i=1;i<=n;++i) scanf("%s",s[i]+1);
        for(int i=1;i<=n && !tag;++i)
            dfs(i,i,1<<i-1);
        if(!tag) printf("No Solution");
        else
        {
            for(int i=m;i>1;--i)  printf("%d ",ans[i]);
            printf("%d",ans[1]);
        }
    } 
  • 相关阅读:
    uniapp请求拦截
    stellar视差插件
    fullpage全屏插件应用
    fullpage全屏插件简介
    WdatePicker日期插件
    Ueditor富文本编辑器
    layer弹出层
    验证码绘制
    Ajax跨域访问
    JQuery封装的ajax方法
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/13767015.html
Copyright © 2011-2022 走看看