【搜索】字符序列

mac2024-05-20  28

第二天叫醒我的不是闹钟,是梦想!

题目描述 从三个元素的集合[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; }
最新回复(0)