题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1088
很明显,只要第一行的第一个位置有无雷确定了,那么整个第一行也就随之确定。所以,只需枚举第一行第一个位置是否有雷,然后递推判断状态是否合法即可。
代码:
#include <cstdio>
#include <cstring>
#define MAXN 10002
int a[MAXN],f[MAXN],n,ans=0;
bool check() {
for (int i=0;i++<n;) {
int sum=f[i-1]+f[i];
if (sum>a[i]||sum+1<a[i]) return false;
f[i+1]=sum==a[i]?0:1;
}
return f[n+1]?false:true;
}
int main() {
scanf("%d",&n);
for (int i=0;i++<n;) scanf("%d",&a[i]);
for (int i=0;i<2;i++) {
memset(f,0,sizeof(f));
f[1]=i;
if (check()) ans++;
}
printf("%d\n",ans);
return 0;
}