博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SCOI2005]扫雷
阅读量:5147 次
发布时间:2019-06-13

本文共 642 字,大约阅读时间需要 2 分钟。

Description

  相信大家都玩过扫雷的游戏。那是在一个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三种。

 

这个题目脑洞还是很大的。

代码略。

 

转载于:https://www.cnblogs.com/Miracevin/p/9583432.html

你可能感兴趣的文章
为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了
查看>>
线程之间灵活传递信号(ManualResetEventSlim )
查看>>
CountDownEvent 信号类来等待直到一定数量的操作完成
查看>>
Barrier 组织多个线程及时在某个时刻碰面
查看>>
select into 与 insert into select
查看>>
MySQL索引
查看>>
MySQL的事务隔离级别
查看>>
MVCC实现机制
查看>>
常见互联网名词解释
查看>>
从微信小程序开发者工具源码看实现原理(二)- - 小程序技术实现
查看>>
从微信小程序开发者工具源码看实现原理(四)- - 自适应布局
查看>>
微信小程序捕获async/await函数异常实践
查看>>
聊聊JavaScript异步中的macrotask和microtask
查看>>
利用AND和OR的运算规则进行SQL注入
查看>>
HTMLTestRunner用法
查看>>
为什么要做WebUI测试?
查看>>
接口签名
查看>>
OSI七层协议与TCP/IP四层协议
查看>>
turtle风轮绘制
查看>>
接口签名2
查看>>