P2327 [SCOI2005]扫雷(递推)
题目链接:
https://www.luogu.org/problemnew/show/P2327
题目描述
相信大家都玩过扫雷的游戏。那是在一个$n*m$的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是$n*2$的,第一列里面某些格子是雷,而第二列没有雷,如下图:

由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。
输入输出格式
输入格式:
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
输出格式:
一个数,即第一列中雷的摆放方案数。
输入输出样例
2
1 1
2
思路:
真的是太有意思了$QWQ$
线性递推,设右边的一列为a[i],表示左边第i-1,i,i+1三个空格含有的地雷的个数;左边一列是否含有地雷为f[i],其中f[i]要么为1(表示含有地雷);要么为0(表示不含地雷)。那么有$a[i]=f[i-1]+f[i]+f[i+1]$成立。
其次,只需要判断右边第一列的数值大小(即a[1]的大小)就可以了,a[1]可能为0,1,2。因为a[1]如果确定,那么f[]数组的前两个数f[1],f[2]也随之确定,同时由于数组a[]的每个位置都是定值,可以推出当f[1]和f[2]确定时,整个f[]数组也只有可能为一种情况。
接下来详细说明:
如果a[1]为0的话,那么有f[1]=0,f[2]=0成立,然后根据数组a[]递推一波,看每个点的f[i]是否满足题意;
对a[1]为1和2与a[1]为0的情况同理。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[10010],a[10010];
int n;
int judge(){
for(int i=1;i<=n;i++){
f[i+1]=a[i]-f[i]-f[i-1];//a[i]=f[i-1]+f[i]+f[i+1]
if(f[i+1]<0||f[i+1]>1) return 0;
}
if(f[n+1]>=1||f[n+1]<0) return 0;//注意这里递推到f[n+1]时原则上f[n+1]只能为0,即这个地方不可能有地雷 return 1;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int cnt=0;
if(a[1]==0){
f[1]=0;
f[2]=0;
cnt+=judge();
}
else if(a[1]==1){
f[1]=1;
f[2]=0;
cnt+=judge(); memset(f,0,sizeof(f));
f[1]=0;
f[2]=1;
cnt+=judge();
}
else if(a[1]==2){
f[1]=1;
f[2]=1;
cnt+=judge();
} printf("%d\n",cnt);
}
P2327 [SCOI2005]扫雷(递推)的更多相关文章
- 洛谷 P2327 [SCOI2005]扫雷
P2327 [SCOI2005]扫雷 https://www.luogu.org/problem/show?pid=2327 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二 ...
- bzoj1088 P2327 [SCOI2005]扫雷
P2327 [SCOI2005]扫雷 emmmmm.....这题真可以用状压写 因为每个数字只对3个格子有影响,相当于只有2^3=8种状态,所以可以用状压瞎搞 我们用8个数字代表二进制下的8种状态 0 ...
- 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]
P2327 [SCOI2005]扫雷 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一 ...
- 【题解】Luogu P2327 [SCOI2005]扫雷
Luogu P2327 [SCOI2005]扫雷 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余" ...
- Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925
题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...
- hdu_5965_扫雷(递推)
题目链接:hdu_5965_扫雷 题意: 中文,还是自己看吧. 题解: 现场赛这题用的状压DP过的,不过现在想想当时还确实想复杂了,冷静下来仔细思靠一下,其实第i-1个确定了,那么第i个也是确定的,可 ...
- luogu P2327 [SCOI2005]扫雷
很好的一道题,仔细思索(在y^3 dalao的帮助下)可以发现答案只有0 1 2三种情况 直接枚举第一位有没有雷,就可以递推了qwq 附上y^3大佬的blogs https://blog.csdn.n ...
- 洛谷P2327 [SCOI2005] 扫雷
题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...
- P2327 [SCOI2005]扫雷
题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...
随机推荐
- js下 Day12、案例
一.垃圾分类 效果图: 功能思路分析: 1. 鼠标按下 (1) 获取鼠标到元素的距离(e.offsetX) (2) 开启开关变量 (3) 获取事件源 (4) 记录垃圾初始位置 2. 鼠标移动 ( ...
- 利用302绕过http协议限制
360某处ssrf漏洞可探测内网信息(附内网6379探测脚本) http://xss.one/bug_detail.php?wybug_id=wooyun-2016-0229611
- DVWA-文件包含-目录遍历学习笔记
参考文献资料: https://www.cnblogs.com/s0ky1xd/p/5823685.html https://www.cnblogs.com/yuzly/p/10799486.html ...
- zabbix学习(一)——LNMP环境搭建及zabbix安装
第一部分:LNMP环境搭建 一.环境说明: OS: centos7.6_x64nginx:nginx-1.16.0php: php-7.1.11mysql:mysql-5.6.44 zabbi ...
- 图解JanusGraph系列 - JanusGraph指标监控报警(Monitoring JanusGraph)
大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步(超链):图数据库系列-文章总目录 源码分析相关可查看github(码文不易,求个sta ...
- pycharm的快捷键的使用
作为未来的程序猿,快捷键对我们来说很重要,因为它方便且快捷,今天就给大家介绍pycharm中常用的快捷键 1.编辑: Ctrl + Space------------------基本的代码完成(类.方 ...
- Java学习_反射
什么是反射? 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法. JAVA反射机制是在运行状 ...
- Screaming Frog SEO Spider页面分析工具使用方法
一. 下载地址:https://www.screamingfrog.co.uk/seo-spider/ 二. 使用教程 链接1: https://blog.csdn.net/a055350/art ...
- [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串
很重要的一道题 题型适合在面试的时候考 位操作和哈希表结合 public List<String> findRepeatedDnaSequences(String s) { /* 寻找出现 ...
- 【目标检测】基于传统算法的目标检测方法总结概述 Viola-Jones | HOG+SVM | DPM | NMS
"目标检测"是当前计算机视觉和机器学习领域的研究热点.从Viola-Jones Detector.DPM等冷兵器时代的智慧到当今RCNN.YOLO等深度学习土壤孕育下的GPU暴力美 ...