今天做了几道BZOJ的题,发现统观题目时还是很多很多都不会的,不过还是有几道时可以作的,以后要慢慢加强,争取多做题

BZOJ 1088 扫雷

其实本人平常不大玩扫雷的,就算玩也不是很好,不过看n*2的扫雷,也是微醺啊QAQ

1088: [SCOI2005]扫雷Mine

Time Limit: 10 Sec Memory Limit: 162 MB

Submit: 2299 Solved: 1345

[Submit][Status][Discuss]

Description

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

Input

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

Output

一个数,即第一列中雷的摆放方案数。

Sample Input

2

1 1

Sample Output

2

这道题可以看出,因为知道第二列每个点附近有几个雷,有知道附近指的是八联通,又因为是n*2的雷区。。所以不难想到,每个第二列的点,炸弹数分布在三个格中(收尾除外,为两个),所以由第二列第一个点附近的雷数,可以得到第一列第一二格是否有雷,所以往下找就能找到,最后只需要判断是否合法就好

其转移可表示为

boom[i]=num[i-1]-(boom[i-1]+boom[i-2]);

(num为第二列的点的值,boom是第一列是否有雷0无雷1有雷)

下面是代码(写到一半发现其实写个过程就简短多了,然而。。。)/(ㄒoㄒ)/~~

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
int num[10010]={0};//存储第二列的每个格里的数,及附近炸弹数
int boom[10010]={0};//第一列是否有炸弹(0为无炸弹,1为炸弹)
int ans=1; int main()
{
scanf("%d",&n);
memset(boom,0,sizeof(boom));
for (int i=1; i<=n; i++)
scanf("%d",&num[i]);
if (num[1]!=1)//因为第一个点可以控制两个点的炸弹数,如果的得知第一个点周围没炸弹或有两个炸弹,那么前两个点都有炸弹或都没有炸弹
{
ans=1;
if (num[1]==0)
boom[1]=boom[2]=0;
if (num[1]==2)
boom[1]=boom[2]=1;
for (int i=3; i<=n+1; i++)
boom[i]=num[i-1]-(boom[i-1]+boom[i-2]);
if (boom[n+1]!=0)//判断是否可行
ans--;//因为ans初值为1,所以如果不可行减1即可
}
if (num[1]==1)//如果第一个点附近有一个炸弹,则有两种情况(1) 第一个点有炸弹,第二个点没有 (2)第一个点没有,第二个点有
{
ans=2;
boom[1]=1;
boom[2]=0;
for (int i=3; i<=n+1; i++)
boom[i]=num[i-1]-(boom[i-1]+boom[i-2]);
if (boom[n+1]!=0)
ans--;//第一种情况
boom[1]=0;
boom[2]=1;
for (int i=3; i<=n+1; i++)
boom[i]=num[i-1]-(boom[i-1]+boom[i-2]);
if (boom[n+1]!=0)
ans--;//第二种情况
}
printf("%d",ans);
}

BZOJ 1088 扫雷Mine的更多相关文章

  1. 【BZOJ 1088 扫雷Mine】模拟

    http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的 ...

  2. BZOJ 1088 扫雷Mine 枚举初始状态

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088 题目大意: 现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: ...

  3. BZOJ 1088 扫雷Mine (递推)

    题解:如果确定了第一排前两个数,那么剩下的数是唯一确定的,所以只要分情况讨论即可. #include <cstdio> #include <cstring> int n,a[1 ...

  4. Bzoj 1088: [SCOI2005]扫雷Mine (DP)

    Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\) ...

  5. 【递推】BZOJ 1088: [SCOI2005]扫雷Mine

    1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2275  Solved: 1328[Submit][St ...

  6. 【BZOJ】1088: [SCOI2005]扫雷Mine

    1088: [SCOI2005]扫雷Mine Description 相 信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的 ...

  7. bzoj 1088: [SCOI2005]扫雷Mine

    题目链接 1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2525  Solved: 1495[Submi ...

  8. BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】

    1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3791  Solved: 2234[Submit][St ...

  9. 1088: [SCOI2005]扫雷Mine

    1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 979[Submit][Sta ...

随机推荐

  1. 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试

    什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...

  2. T138

    这一列车. 十年前送我去西安, 十年后搭我返故乡. 十年前手拉着手儿, 十年后独对着车窗.   这一列车. 装饰着坚毅的中国蓝, 却失去了往日光环. 只有通往偏远.落后的地方, 只有没赶上高铁动车的行 ...

  3. filestream read方法 循环读取固定文件

    1.循环读取啊,byte[]可以定义为1024或者2049等等,不要超过int的maxvalue就可以.然后取出来操作完再去取. FileStream stream = new FileStream( ...

  4. office2016各个版本 以及 解决visio搜索任何都提示无匹配项问题

    http://tieba.baidu.com/p/4089747196 版本:Office 2016 Visio 专业版 32位版文件名:SW_DVD5_Visio_Pro_2016_W32_ChnS ...

  5. 开发备忘:AngularJS Syntax error, unrecognized expression in template file

    在写基于Angular的项目过程中,运行 grunt test的时候,一直给我蹦出这个错误,导致我的test一直跑不过,怎么试都是失败,经过重复排查,发现是因为template file中的html元 ...

  6. ios蓝牙开发(五)BabyBluetooth蓝牙库介绍

    BabyBluetooth 是一个最简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和mac osx. 特色: 基于原生CoreBluetooth框架封装的轻量级的开源库,可以帮你 ...

  7. swift邮箱手机验证

    import UIKit class Validate: NSObject { //邮箱.手机验证 enum ValidatedType { case Email case PhoneNumber } ...

  8. Javascript中判断数组的正确姿势

    在 Javascript 中,如何判断一个变量是否是数组? 最好的方式是用 ES5 提供的 Array.isArray() 方法(毕竟原生的才是最屌的): var a = [0, 1, 2]; con ...

  9. web安全——数据库(mysql)

    简介 数据安全是现在互联网安全非常重要一个环节.而且一旦数据出现问题是不可逆的,甚至是灾难性的. 有一些防护措施应该在前面几个博文说过了,就不再赘述.比如通过防火墙控制,通过系统的用户控制,通过web ...

  10. JSON返回DateTime/Date('123123123')/解决办法

    Date.prototype.format = function (format) //author: meizz    {        var o = {            "M+& ...