离散0-1串问题
问题描述
(n,k)01 串定义为:长度为 n 的 01 串,其中不含 k 个连续的相同子串。对于给定的正整数 n 和 k,计算(n,k)01 串的个数。
数据输入:
第一行有 2 个正整数 n 和 k,1≤k,n≤40。
Java
package Chapter5HuiSuFa;
import java.util.Scanner;
public class LiSan01Chuan {
private static int n,k;
private static short[] bstr;
private static int[] x;
private static int tot;
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while (true){
tot = 0;
n = input.nextInt();
k = input.nextInt();
bstr = new short[n+1];
x = new int[k];
bstr[1] = 0;
if(k > 1) backtrack(2);
System.out.println(tot);
}
}
private static void backtrack(int lev){
if(lev > n) {tot+=2; return;}
for(int i=0; i<2; i++){
bstr[lev] = (short) i;
if(bstrok(lev)) backtrack(lev+1);
}
}
private static boolean bstrok(int lev){
for(int i=0; i<k; i++) x[i]=lev-i;
while (x[k-1] > 0){
if(same()) return false;
for(int i=0; i<k; i++) x[i]-=i+1;
}
return true;
}
private static boolean same(){
int len = x[0]-x[1];
for(int i=0; i<len; i++)
for(int j=1; j<k; j++)
if(bstr[x[j]+i] != bstr[x[j-1]+i])
return false;
return true;
}
}
Input & Output
2 3
4
10 5
800
25 5
14720520
Reference
王晓东《计算机算法设计与分析》

本文探讨了(n,k)01串的定义,即长度为n的01串,其中不含k个连续相同的子串。文章针对给定的正整数n和k,详细阐述如何计算这种特殊01串的数量。提供了数据输入的说明,并提到了参考书籍《计算机算法设计与分析》。"
104771265,9056553,jumpserver堡垒机配置与管理指南,"['运维', 'jumpserver', '资产管理', '安全', 'web终端']
9201

被折叠的 条评论
为什么被折叠?



