zoukankan      html  css  js  c++  java
  • UVA-129 Krypton Factor(回溯)

    题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串。找出由前L个字母组成的第n个困难的串。

    题目分析:简单回溯,不过要判断是否存在重复子串比较棘手。《入门经典》上借鉴八皇后问题,只判断添进字符后是否存在连续子串。具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    int n,k,cnt,path[1000];
    
    void dfs(int cur)
    {
        if(cur>81)
            return ;
        if(cnt++==n){
            for(int i=0;i<cur;++i){
                printf("%c",char(path[i]+'A'));
                if(i%4==3&&i!=cur-1){
                    if(i%64==63)
                        printf("
    ");
                    else
                        printf(" ");
                }
            }
            printf("
    %d
    ",cur);
            return ;
        }
        for(int i=0;i<k;++i){
            path[cur]=i;
            int flag=1;
            for(int j=1;j*2<=cur+1;++j){
                int ok=1;
                for(int l=0;l<j;++l)
                    if(path[cur-l]!=path[cur-l-j]){
                        ok=0;
                        break;
                    }
                if(ok){
                    flag=0;
                    break;
                }
            }
            if(flag)
                dfs(cur+1);
            if(cnt>n)
                return ;
        }
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&k)&&(n+k))
        {
            cnt=0;
            dfs(0);
        }
        return 0;
    }
    

      

  • 相关阅读:
    连续最大和
    买苹果(找规律)
    最大的奇约数(找规律化简)
    暗黑字符串(递推)
    虚拟机无法通过桥接上网
    使用SQLServer 2012修改表
    使用SQL Server 2012创建表
    使用SQL Server 2012创建和删除数据库
    SQL Server 2012安装
    关系型数据模型
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4844179.html
Copyright © 2011-2022 走看看