1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 int f[10009],a[10009],n,ans; 6 bool pan() 7 { 8 for(int i=2;i<n;i++) 9 { 10 f[i+1]=a[i]-f[i]-f[i-1]; 11 if(f[i+1]<0) 12 return 0; 13 } 14 if(f[n]+f[n-1]!=a[n]) 15 return 0; 16 return 1; 17 } 18 int main() 19 { 20 scanf("%d",&n); 21 for(int i=1;i<=n;i++) 22 scanf("%d",&a[i]); 23 if(!a[1]) 24 ans+=pan(); 25 else if(a[1]==1) 26 { 27 f[1]=1; 28 ans+=pan(); 29 memset(f,0,sizeof(f)); 30 f[2]=1; 31 ans+=pan(); 32 } 33 else 34 { 35 f[1]=1; 36 f[2]=1; 37 ans+=pan(); 38 } 39 printf("%d\n",ans); 40 return 0; 41 } 42
只要第一行第一格与第二格确定下来,整行就确定了。所以只要枚举后再判定即可。