第二天叫醒我的不是闹钟,是梦想!
题目描述 从三个元素的集合[A,B,c]中选取元素生成一个N个字符组成的序列,使得没有两个相邻的子序列相同。例:N=5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC, AB是相同的。
输入 一个整数n(1≤n≤15)。
输出 满足条件的N个字符的序列总数。
样例输入 Copy 3 样例输出 Copy 12
#include
<bits
/stdc
++.h
>
using namespace std
;
int n
,res
;
int a
[20],i
,j
,s
;
void dfs(int k
)
{
int i
,j
;
if(k
>n
)
{
res
++;
return ;
}
else
{
for( i
=1;i
<=3;i
++)
{
s
=s
*4+i
;
for( j
=2;j
<=k
;j
+=2)
{
if(s
%a
[j
]==s
/a
[j
]%a
[j
]) break;
}
if(j
>k
) dfs(k
+1);
s
=s
/4;
}
}
}
int
main()
{
cin
>>n
;
for(a
[0]=i
=1;i
<=n
;i
++)
a
[i
]=a
[i
-1]*2;
dfs(1);
cout
<<res
<<endl
;
}
转载请注明原文地址: https://mac.8miu.com/read-491919.html