字符序列
today’s 回溯2333
问题描述
从三个元素的集合 [A,B,C[A,B,C] 中选取元素生成一个 NN 个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:NN=5时 ABCBA
是合格的,而序列 ABCBC
与 ABABC
是不合格的,因为其中子序列BC
,AB
是相同的。
对于由键盘输入的 NN(1≤N≤12),求出满足条件的 NN 个字符的所有序列和其总数。
输入格式
一行,一个整数 NN。
输出格式
一个整数,即满足条件的序列总数。
样例一
input
4
output
72
数据范围与约定
时间限制: 1s1s
内存限制: 256MB256MB
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int ans; 5 int d[20]; 6 void search (int n,int k=0){ 7 if(n==k) { 8 ans++; 9 return ; 10 } 11 for(char ss='A';ss<='C';ss++){ 12 d[k]=ss; 13 bool aaa=true; 14 if(k>2 && d[k]==d[k-2] && d[k-1]==d[k-3]) aaa=false; 15 if(aaa) search (n,k+1); 16 } 17 } 18 int main(){ 19 cin>>n; 20 search(n); 21 cout<<ans<<endl; 22 return 0; 23 }
“胡须如草芥疯长,悲欢不过梦一场”