题目描述
从三个元素的集合[A,B,C][A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N=5时时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。
对于由键盘输入的N(1≤N≤12),求出满足条件的N个字符的所有序列和其总数。
样例
输入 4
输出 72
代码
#include<bits/stdc++.h>
using namespace std;
intn;
int a[20];
int sum=0;
void dfs(int k)
{
if(k>n)
{
sum++;
return;
}
for(int i=1;i<=3;i++)
{
if(i==a[k-2]&&a[k-1]==a[k-3])//若i==a[k-2]并且a[k-1]==a[k-3]那么a[k]和a[k-1]组成的子序列可
//能和a[k-2]和a[k-3]组成的子序列相同,相同的话进入下一层循环。
{
continue;
}
a[k]=i;
dfs(k+1);
}
}
int main()
{
scanf("%d",&n);
dfs(1);
cout<<sum;
return 0;
}