扫雷屌丝版
来源:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1289
题目描述
大家肯定都玩过扫雷,现在来做一个简化版。我们在2行N(1<=N<=12000)列的矩阵中已知第一行的所有格子的信息,求第二行的可能方案数
输入
第一行为N
第二行为N个数,表示第一行每个格子中的数字
输出
输出可能方案数
样例输入
1 2 |
2 1 1 |
样例输出
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 26 27 28 29 30 31 32 |
#include<iostream> using namespace std; int ans=0; int n; int a[12001]; bool b[12001]; bool pd(int x) { int s=b[x]; if(x==1)return 1; if(x-1>=1)s+=b[x-1]; if(x-2>=1)s+=b[x-2]; if(a[x-1]==s)return 1; else return 0; } void dfs(int x) { if(x==n+1&&pd(n+1))ans++; if(pd(x))dfs(x+1); b[x]=1; if(pd(x))dfs(x+1); b[x]=0; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(1); cout<<ans; return 0; } |
Subscribe