题意:如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的串”

输入正整数n和L,输出由前L个字符组成的并且它的字典序是第n小的串,和输出这个串的长度

样例输入:

7 3

30 3

样例输出:

ABAC ABA

7

ABAC ABCA CBAB CABA CABC ACBA CABA

28

为了避免判断做无用功,每次都从尾部开始,枚举所有可能长度,在和前面的串匹配。因为前面的串已经匹配过,所以可以直接从尾部开始。

#include<iostream>
#include <string>
#include <string.h>
using namespace std;
const int maxn = 10000;
int cnt = 0,n,l; int c[maxn];
int dfs(int cur) {if (cnt++ == n) {//到达第n小的字典序int nextline = 0;for (int i = 0; i < cur; i++) {printf("%c", c[i] + 'A');if ((i + 1) % 4 == 0 && i != cur - 1) { nextline++;if (nextline % 16 == 0){printf("\n");continue;}printf(" ");}}printf("\n%d\n",cur);return 0;}for (int i = 0; i < l; i++) {//搜索前l个字母int ok = 1;c[cur] = i;for (int j = 1; 2 * j <= cur + 1; j++) {//枚举长度,cur是从0开始所以要加一int equal = 1;for (int k = 0; k < j; k++) {//搜索长度为j的串是否和前面相邻的长度为j的串相等//不以cur结尾的串都在前面已经判断过,所以不用判断if (c[cur - k] != c[cur - k - j]) {//存在不等equal = 0; break;}}if (equal) {//若相等则不dfs下一个ok = 0; break;}}if (ok)if (!dfs(cur + 1))return 0;//如果搜索到了就退出}return 1;
}
int main()
{
#ifdef LOCALfreopen("data.in", "r", stdin);//scanffreopen("data.out", "w", stdout);//printf
#endifwhile (cin >> n >> l && n&&l) {cnt = 0;dfs(0);}//system("pause");return 0;
}

回溯法之避免无用判断 UVA129 Krypton Factor困难的串相关推荐

  1. Uva129 Krypton Factor【dfs回溯】【例题7-5】

    题目:Krypton Factor 题意:如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".输入n,L,输出由前L个字符组成的 ...

  2. UVa129 Krypton Factor

    回溯法. 使用26个字母中前L个字母,要求输出一个不存在相同的相邻子串的序列,该序列应是所有合法序列中字典序第N小的. DFS枚举所有可行序列,因为序列长度不定所以解答树中除根节点之外的每个结点都算合 ...

  3. 回溯法实现正则匹配判断

    *:匹配任意个字符 ?:匹配至多1个字符 <?phpclass MNode {public $strIndex;public $patIndex;public $leftMatch = null ...

  4. 子集和数问题——回溯法(C++)

    问题描述 已知(w1, w2, -, wn)和M,均为正数.要求找出wi的和数等于M的所有子集. 例如:若n=4,(w1,w2,w3,w4)=(11,13,24,7),M=31,则满足要求的子集是(1 ...

  5. c语言实现判断两个子图是否同构问题_经典问题-回溯法-最大团问题

    1. 知识点 注:用回溯法实现最大团问题和用回溯法实现装载问题,解决方案和复杂度是类似的.如果你对回溯法或者子集树问题,并不了解,可以参看一下这篇文章,里面补充了回溯法和子集树的概念. 装载问题-回溯 ...

  6. 回溯法 —— 判断子集和问题是否存在解

    判断子集和问题是否存在解 分析思路: 采用回溯法针对问题存在解时求出相应的一个或多个解,或者最优解.如果需要判断问题是否存在解(一个或者多个),可以将求解函数改为bool型,当找到任何一个解时返回tr ...

  7. UVA - 129 Krypton Factor (困难的串)(回溯法)

    题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...

  8. 算法设计与分析第5章 回溯法(二)【回溯法应用】

    第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...

  9. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

最新文章

  1. C#WinForm的线程及Invoke应用(转)
  2. android 弹出fragment,Android中ViewPager获取当前显示的Fragment
  3. Java 多线程异常捕获Runnable实现
  4. Java并发编程实战————可重入内置锁
  5. 使用Keil5构建GD32450i-EVAL工程
  6. 支付宝推生物识别;Google 爆重大隐私问题;TensorFlow 2.0 即将发布 | 极客头条
  7. COJ 0967 WZJ的数据结构(负三十三)
  8. javascript document.cookie
  9. 【雷达通信】基于matlab联邦滤波算法惯性+GPS+地磁组合导航仿真【含Matlab源码 1276期】
  10. echarts官网的使用方法
  11. pve万兆网卡驱动_WiFi 6扩展有什么选择?Killer AX1650X无线网卡深度测评
  12. libyuv库简单使用
  13. 桂林瑶大叔名老中医馆
  14. html map插件,jQuery谷歌地图插件maplace.js
  15. 《阵列信号处理及MATLAB实现》阵列响应矩阵(均匀线阵、均匀圆阵、L型阵列、平面阵列和任意阵列)
  16. 解决libpng warning: iCCP: known incorrect sRGB profile
  17. pta习题:退休日期推算
  18. 超级计算机多层网络,超级计算机的多层架构抽象及描述
  19. 核心层,汇聚层,接入层,交换机性能差别
  20. 宇宙长城谭之二:达尔文渐变论揭开中微子超光速之谜谭

热门文章

  1. ObjectFactory 的create()方法什么时候被调用?
  2. DefaultListableBeanFactory 对配置lazy-init 属性单态Bean 的预实例化
  3. c# wpf 面试_WPF 基础面试题及答案(一)
  4. oracle 创建表中又有表,oracle创建表
  5. maven 公用仓库_Maven系列(二):Maven 核心概念
  6. python异步框架twisted_twisted是python实现的基于事件驱动的异步网络通信构架。
  7. pytorch教程龙曲良26-30
  8. SpringMVC+Spring+mybatis项目搭建详细过程
  9. 【Laravel-海贼王系列】第十三章,路由控制器解析
  10. Xamarin Live Player Preview 2: 连续运行和调试应用程序