【递推】BZOJ 1088: [SCOI2005]扫雷Mine

来源:互联网 发布:基于时间的sql注入 编辑:程序博客网 时间:2024/05/30 04:23

1088: [SCOI2005]扫雷Mine

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2275  Solved: 1328
[Submit][Status][Discuss]

Description

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

Input

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

Output

一个数,即第一列中雷的摆放方案数。

Sample Input

2
1 1

Sample Output

2

  世纪大水题。。
  然而我这个大蒟蒻还是偷看了一发题解。。
  只要确(mei)定(ju)第一个位置有没有雷就能知道推出整个序列
  然后就是判定问题了。。
  
 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5  6 using namespace std; 7  8 inline int in() 9 {10     int x=0;char ch=getchar();11     while(ch<'0'||ch>'9')ch=getchar();12     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();13     return x;14 }15 16 int a[10001],n;17 18 int jud(int f1)19 {20     int f2=a[1]-f1;21     for(int i=2;i<n;i++)22     {23         int f3=a[i]-f1-f2;24         if(f3==0||f3==1)25         {26             f1=f2;27             f2=f3;28         }29         else return 0;30     }31     if(f1+f2!=a[n])return 0;32     else return 1;33 }34 35 int main()36 {37     int ans=0;38     n=in();39     for(int i=1;i<=n;i++)a[i]=in();40     if(n==1&&(a[1]==0||a[1]==1)){printf("1");return 0;}41     if(a[1]==0)ans+=jud(0);42     else ans+=jud(0)+jud(1);43     printf("%d",ans);44     return 0;45 }
View Code

  vfk:

  gg。。

0 0
原创粉丝点击