您的位置:首页 > 其它

字符序列 解题报告

2015-08-13 09:17 239 查看



Problem Description

从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N=5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。

对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列总数。


Input

输入有多组数据,每组数据只有一行为一个整数N。


Output

对于每组数据满足条件的N个字符的所有序列总数


Sample Input

      4


Sample Output

     72

【解题思路】
深搜;
重点是判断是否是合格的子序列;
因为子序列长度=2,还比较好处理;

【代码】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans=0,a[10001];

void dfs(int dep)
{
int i;
if (dep==n+1)
{
ans++;
return;
}
for (i=1;i<=3;++i)//集合中只有A,B,C
if (dep<4||i!=a[dep-2]||a[dep-1]!=a[dep-3])//本题的关键,判断是否合法,长度>=4的序列只需要当前点和dep-2点,dep-1点和dep-3
{                                          //点是否都相同。还是比较好处理的。
a[dep]=i;
dfs(dep+1);
}
return;
}

int main()
{
scanf("%d",&n);
dfs(1);
printf("%d",ans);
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: