【做题笔记】P2327 [SCOI2005]扫雷

本文详细介绍了如何解决P2327扫雷问题,采用四维动态规划策略,通过枚举第二列数值并根据不同情况讨论状态转移。文章提供了清晰的思路、做法以及简单易懂的C++代码实现。
摘要由CSDN通过智能技术生成

https://www.luogu.com.cn/problem/P2327


看到题解区一位 dalao 思路甚妙,很受启发,故整理了一下思路。

本人表述能力不强,如讲解不清还请见谅。


思路:

四维 DP,定义四维 f f f 数组,第一维存储第二列数的位置 i i i,第二、三、四维分别表示第一列 i − 1 i-1 i1 , i i i , i + 1 i+1 i+1 的位置有没有雷(定义 1 为有雷,0 为无雷)。

所以初始化为 f ( 0 , 0 , 0 , 0 ) = f ( 0 , 0 , 0 , 1 ) = 1 f(0,0,0,0)=f(0,0,0,1)=1 f(0,0,0,0)=f(0,0,0,1)=1.

我们还能知道, a i a_i ai 影响的摆放雷的方案的位置 i + 1 i+1 i+1 , i i i a i − 1 a_{i-1} ai1 影响的摆放雷的方案的位置 i i i , i + 1 i+1 i+1 推来,那么转移思路就很好想了。


做法:

枚举第二列每一个数,因为棋盘是 n × 2 n\times2 n×2 的大小,所以 a i a_i ai 不能大于 4,所以分以下四种情况讨论:

1.当 a i = 0 a_i=0 ai=0 时,此时状态为 f ( i , 0 , 0 , 0 ) f(i,0,0,0) f(i,0,0,0).

a i − 1 a_{i-1} ai1 转移时,只有 f ( i − 1 , 1 , 0 , 0 ) f(i-1,1,0,0) f(i1,1,0,0) f ( i − 1 , 0 , 0 , 0 ) f(i-1,0,0,0) f(i1,0,0,0) 两种情况.

所以 f ( i , 0 , 0 , 0 ) = f ( i − 1 , 1 , 0 , 0 ) + f ( i − 1 , 0 , 0 , 0 ) f(i,0,0,0)=f(i-1,1,0,0)+f(i-1,0,0,0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值