luoguP2327 [SCOI2005]扫雷

题目

x,y=1:放 0:不放

calc(p,x,y)计算第p个位置为x 第p+1个位置为y的方案数

显然第p-1个位置需要为a[p]-x-y才能满足第p个位置

可见答案只可能是0/1/2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<bits/stdc++.h>
#define ll long long
#define N 10010
#define fsb(a,b,c) for(int a=b;a<=c;a++)
#define fbs(a,b,c) for(int a=b;a>=c;a--)
using namespace std;
int a[N],n;
template<typename T>inline void rll(T &x){
T f=1;x=0;char c=getchar();
while(!isdigit(c))f=c=='-'?-1:f,c=getchar();
while(isdigit(c))x=x*10+c-'0',c=getchar();
x*=f;
}
inline int calc(int p,int x,int y){
if(p==0) return (x==0)?1:0;
int t=a[p]-x-y;
if(t<0||t>1)return 0;
return calc(p-1,t,x);
}
int main(){
rll(n);
fsb(i,1,n)rll(a[i]);
printf("%d\n",calc(n,0,0)+calc(n,1,0));
return 0;
}