Date:2022.02.09
题目描述
相信大家都玩过扫雷的游戏。那是在一个n×m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图:

由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。
输入格式
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
输出格式
一个数,即第一列中雷的摆放方案数。
输入输出样例
输入 #1复制
2
1 1
输出 #1复制
2

思路:定义状态f[i][j][k]f[i][j][k]f[i][j][k],表示------第iii个格子的状态为jjj,第i+1i+1i+1个格子的状态为kkk的方案数。其中状态为0表示无雷,状态为1表示有雷。开始fff写了个四维的,三维也一样。其中,初始化时f[0][0][0]很显然是1f[0][0][0]很显然是1f[0][0][0]很显然是1,而f[0][0][1]f[0][0][1]f[0][0][1]中核心点为i==0i==0i==0,但由于在矩阵外边影响不到矩阵里边,因此也算是一种可行方案,初始化也为1。
状态转移方程就要分为四类:
①a[i]==0:f[i][0][0]+=f[i−1][0][0];a[i]==0:f[i][0][0]+=f[i-1][0][0];a[i]==0:f[i][0][0]+=f[i−1][0][0];
②a[i]==1:f[i][0][1]+=f[i−1][0][0];f[i][0][0]+=f[i−1][1][0];f[i][1][0]+=f[i−1][0][1];a[i]==1:f[i][0][1]+=f[i-1][0][0]; f[i][0][0]+=f[i-1][1][0]; f[i][1][0]+=f[i-1][0][1];a[i]==1:f[i][0][1]+=f[i−1][0][0];f[i][0][0]+=f[i−1][1][0];f[i][1][0]+=f[i−1][0][1];
③a[i]==2:f[i][1][0]+=f[i−1][1][1];f[i][0][1]+=f[i−1][1][0];f[i][1][1]+=f[i−1][0][1]a[i]==2:f[i][1][0]+=f[i-1][1][1]; f[i][0][1]+=f[i-1][1][0]; f[i][1][1]+=f[i-1][0][1]a[i]==2:f[i][1][0]+=f[i−1][1][1];f[i][0][1]+=f[i−1][1][0];f[i][1][1]+=f[i−1][0][1]
④a[i]==3:f[i][1][1]+=f[i−1][1][1];a[i]==3:f[i][1][1]+=f[i-1][1][1];a[i]==3:f[i][1][1]+=f[i−1][1][1];
最终求解答案ansansans时,也是讨论最后一个格子:
①a[i]==0:ans=f[n][0][0];a[i]==0: ans=f[n][0][0];a[i]==0:ans=f[n][0][0];
②a[i]==1:ans=f[n][1][0]+f[n][0][0];a[i]==1: ans=f[n][1][0]+f[n][0][0];a[i]==1:ans=f[n][1][0]+f[n][0][0];
③a[i]==2:ans=f[n][1][0];a[i]==2: ans=f[n][1][0];a[i]==2:ans=f[n][1][0];
④a[i]==3:不可能。a[i]==3: 不可能。a[i]==3:不可能。
代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
typedef long long LL;
LL n,m,a[N],f[N][3][3];
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];f[0][0][0]=f[0][0][1]=1;for(int i=1;i<=n;i++){if(a[i]==0) f[i][0][0]+=f[i-1][0][0];else if(a[i]==1){f[i][0][1]+=f[i-1][0][0];f[i][0][0]+=f[i-1][1][0];f[i][1][0]+=f[i-1][0][1];}else if(a[i]==2){f[i][1][0]+=f[i-1][1][1];f[i][0][1]+=f[i-1][1][0];f[i][1][1]+=f[i-1][0][1];}else f[i][1][1]+=f[i-1][1][1];}LL ans=0;if(a[n]==0) ans=f[n][0][0];else if(a[n]==1) ans=f[n][1][0]+f[n][0][0];else if(a[n]==2) ans=f[n][1][0];//不可能三个都是1,因为角上的八个格子内最多两个雷cout<<ans;return 0;
}

洛谷P2327 [SCOI2005]扫雷【DP】【黄】相关推荐

  1. 洛谷 P2327 [SCOI2005]扫雷

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2327 [SCOI2005]扫雷 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 n*m 的矩阵里面有一些雷,要你根据一些信 ...

  2. 洛谷 P2327 [SCOI2005] 扫雷

    题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...

  3. 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]

    P2327 [SCOI2005]扫雷 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一 ...

  4. 洛谷P2327 [SCOI2005]扫雷 题解

    [SCOI2005]扫雷 - 洛谷 description: 一个 的棋盘.已知右侧一列全部没有雷,且已知第 行相应的格子为 ,表示八联通的格子内共有 个雷.求左侧一列可能的雷的方案数. soluti ...

  5. 洛谷 P2327 [SCOI2005]扫雷 解题报告

    题目 题目分析 题目将扫雷游戏简化,改为只有一列有雷的版本 a[i] 表示第 i 格的数字 f[i][j][k]表示当前做到第 i 个位置,第 i 个位置的状态为 j(1表示无雷,2雷),第 i+1  ...

  6. 洛谷P2327 [SCOI2005] 扫雷

    题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...

  7. [T][3]洛谷 P2331 [SCOI2005] 最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  8. 洛谷 P2331 [SCOI2005]最大子矩阵

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2331 [SCOI2005]最大子矩阵 题目 题目描述 这里有一个 n*m 的矩阵,请你选出其中 k 个子矩阵,使得这个 k 个子 ...

  9. 信息学奥赛一本通 1392:繁忙的都市(city) | 洛谷 P2330 [SCOI2005]繁忙的都市

    [题目链接] ybt 1392:繁忙的都市(city) 洛谷 P2330 [SCOI2005]繁忙的都市 [题目考点] 1. 图论 最小生成树 [解题思路] 将题目叙述转为图论概念,交叉路口为顶点,道 ...

最新文章

  1. java .split(,)
  2. 如何比较js 浮点数
  3. DELL服务器安装过程中出现的ERROR及解决方案
  4. linux系统安装nc,Lifelong learner.
  5. python函数里面,一个*是可变参数的元祖,两个*是可变参数的字典
  6. CentOS7.5下搭建zabbix3.4监控
  7. 查看MySQL表占用空间大小
  8. 贪吃蛇大作战html5,贪吃蛇大作战5.0.1
  9. Win-MASM64汇编语言-通用寄存器AX/BX/CX/DX/SI/DI/BP
  10. matplotlib plot 绘图函数发生阻塞(block)时的解决方法
  11. mysql 秀出两个相关联的表中满足条件的内容_深入挖掘MySQL底层数据结构
  12. 问题分析与解决——ADSL错误代码(转)
  13. Q 系列PLC ST 语言编程笔记
  14. Pyrhon pyqt5 视频转字符画
  15. Python zip, unzip, zip_longest的用法
  16. 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
  17. bootstrap class path not set in conjunction with -source 1.6
  18. OpenGL放大缩小实现
  19. 友价T5商城系统一键生成SiteMap网站地图插件【chajian_sitemap_builder.php】
  20. 拥有有趣灵魂的程序员们,程序员访谈(一)

热门文章

  1. OJ题——吃货排排坐
  2. 项目资源管理-日历图
  3. Yolov3模型使用教程
  4. Jlink 烧录stm32 提示- ERROR: Verification of RAMCode failed @ address 0x20000000.
  5. 计算机毕业设计Java医院预约挂号系统(系统+源码+mysql数据库+Lw文档)
  6. 带你玩转区块链--以太坊基础、发币、基于智能合约实现彩票项目-第二章-第一节【以太坊篇】
  7. AutoJs学习-实现悬浮窗动画和滑动
  8. 谷歌SEO排名受哪些因素的影响?(一)
  9. 【CF #777 div2】A-C
  10. 基于PHP的潮流服装商城系统