相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了
,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字
表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图:
由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放
方案。
Input
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
Solution
发现,第二列的一个数只能影响上面的三个格子。比较容易写出dp。
f[i][0/1][0/1]表示,填完了第i个,第i个和第i-1个有没有雷的方案书。
转移的时候,要看第二列的i,i+1,i+2三个数来判断i+1位置放雷或者不放雷合不合法了。
但是,这个题可以脑洞更大!!!!
发现,如果第一列第一个位置有没有雷是确定的,那么就可以知道整个第一列有没有雷了!
因为,第一个位置有雷的话,根据第二列第一个数字,就可以知道第二个位置有没有雷,进而可以一路确定下去!!!
所以,我们可以枚举第一个位置有没有雷,做两遍,如果合法,就是一种方案。
所以也可以证明,答案只有0,1,2三种。
这个题目脑洞还是很大的。
代码略。