zoukankan      html  css  js  c++  java
  • HDU 4068

    http://acm.hdu.edu.cn/showproblem.php?pid=4068

    暴力枚举两个全排列,犯了若干错误,以此为鉴

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    using namespace std ;
    int n,f,m[10],vis[10],vis2[10],temp[10] ;
    string str[10],ans[10],s[10][10],res[10] ;
    int OK()
    {
        int i,j,flag ;
        i=j=0 ;
        while(i<n && j<n)
        {
            flag=0 ;
            for(int k=0 ;k<m[temp[i]] ;k++)
            {
                if(s[temp[i]][k]==res[j])
                {
                    flag=1 ;
                    break ;
                }
            }
            if(flag)j++ ;
            else i++ ;
        }
        if(i==n)return 1 ;
        return 0 ;
    }
    int ff ;
    int dfs2(int cur)
    {
        if(cur==n)
        {
            if(!OK()){
                ff=0 ;
                return 0 ;
            }
        }
        for(int i=0 ;i<n && ff ;i++)
        {
            if(!vis2[i])
            {
                vis2[i]=1 ;
                temp[cur]=i ;
                dfs2(cur+1) ;
                vis2[i]=0 ;
            }
        }
        if(ff)return 1 ;
        return 0 ;
    }
    void dfs(int cur)
    {
        if(f)
            return ;
        if(cur==n)
        {
            ff=1 ;
            memset(vis2,0,sizeof(vis2)) ;
            if(dfs2(0))
            {
                f=1 ;
                for(int i=0 ;i<n ;i++)
                    ans[i]=res[i] ;
            }
            return ;
        }
        for(int i=0 ;i<n ;i++)
        {
            if(!vis[i])
            {
                vis[i]=1 ;
                res[cur]=str[i] ;
                dfs(cur+1) ;
                vis[i]=0 ;
            }
        }
    }
    
    int main()
    {
        int t ;
        scanf("%d",&t) ;
        for(int cas=1 ;cas<=t ;cas++)
        {
            scanf("%d",&n) ;
            for(int i=0 ;i<n ;i++)
                cin >> str[i] ;
            for(int i=0 ;i<n ;i++)
            {
                scanf("%d",&m[i]) ;
                for(int j=0 ;j<m[i] ;j++)
                {
                    cin >> s[i][j] ;
                }
            }
            sort(str,str+n) ;
            f=0 ;
            memset(vis,0,sizeof(vis)) ;
            dfs(0) ;
            printf("Case %d: ",cas) ;
            if(f)
            {
                puts("Yes") ;
                for(int i=0 ;i<n ;i++)
                {
                    if(i)
                    {
                        putchar(' ') ;
                    }
                    cout << ans[i] ;
                }
                putchar('
    ') ;
            }
            else
                puts("No") ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    SCRUM团队
    SCRUM的四大支柱
    SCRUM的五个价值观
    SCRUM的五个事件
    SCRUM的三个工件
    SCRUM团队的三个角色
    经验性过程
    Windows UWP开发系列 – RelativePanel
    Windows UWP开发系列 – 控件默认样式
    Windows UWP开发系列 – 3D变换
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3667725.html
Copyright © 2011-2022 走看看