/* 题意:给你一列仅仅能取0和1的数。 限制:每3个相邻的数的值固定,开头和结尾仅仅限制两个数 求:有多少种组合方案 解:搜索,在开头和结尾再加一个仅仅能取零的数,直接推断是否符合条件就可以 */ #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; #define N 11000 int sum; int dp[N]; int a[N],n; void dfs(int i) { if(i==2) { if(dp[i]-dp[i-2]!=a[i-1]) return ; } if(i>2) { if(dp[i]-dp[i-3]!=a[i-1]) return ; } if(i==n+1) { sum++; return ; } if(i==n) { dp[i+1]=dp[i]; dfs(i+1); } else { dp[i+1]=dp[i]; dfs(i+1); dp[i+1]=dp[i]+1; dfs(i+1); } return ; } int main() { int i; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); if(n==1) { printf("%d\n",a[1]); continue; } sum=0; dp[0]=0; dp[1]=0; dfs(1); // printf("%d\n",sum); dp[1]=1; dfs(1); printf("%d\n",sum); } return 0;}