[HDU5965]扫雷

题目大意:

一个\(3\times n(n\le10000)\)的扫雷,第\(2\)排没有雷。告诉你第\(2\)排上的数,问有几种埋雷的方案?

思路:

动态规划。

将\(1,3\)两排的雷全部往左移一格,即第\(2\)排上第\(i\)列的数只和\(1,3\)两排第\(i-2,i-1,i\)列的雷有关。

\(f[i][j][k]\)表示前\(i\)列,第\(i\)列有\(k\)个雷,第\(i-1\)列有\(j\)个雷的方案数。

转移十分显然。

时间复杂度\(\mathcal O(n)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<cstring>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=10001,mod=1e8+7;
char s[N+1];
int f[N][3][3];
int main() {
for(register int T=getint();T;T--) {
memset(f,0,sizeof f);
scanf("%s",&s[1]);
const int n=strlen(&s[1]);
for(register int i=1;i<=n;i++) s[i]-='0';
f[0][0][0]=1;
if(s[1]>=1) f[0][0][1]=2;
if(s[1]>=2) f[0][0][2]=1;
for(register int i=1;i<=n;i++) {
for(register int j=0;j<3;j++) {
for(register int k=0;k<3;k++) {
if(f[i-1][j][k]==0||j+k>s[i]||s[i]>2+j+k) continue;
(f[i][k][s[i]-j-k]+=f[i-1][j][k])%=mod;
if(s[i]-j-k==1) (f[i][k][1]+=f[i-1][j][k])%=mod;
}
}
}
int ans=0;
for(register int i=0;i<3;i++) {
(ans+=f[n][i][0])%=mod;
}
printf("%d\n",ans);
}
return 0;
}

[HDU5965]扫雷的更多相关文章

  1. HDU-5965 扫雷 模拟+想法

    http://acm.hdu.edu.cn/showproblem.php?pid=5965 (合肥)区域赛签到题...orz 题意:3*n的地图上扫雷(规则就是正常扫雷),中间一排全部没有雷,且全部 ...

  2. hdu5965扫雷 枚举+递推

    题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...

  3. 【动态规划】【记忆化搜索】hdu5965 扫雷

    f(i,j,k)表示第i行,放的雷的状态为j{0表示不放,1表示往上放,2表示往下放,3表示上下都放},剩余还有k(0<=k<=2)个要放的方案数. 先给出我这个sb写的错误代码,死都没调 ...

  4. HDU5965 扫雷 —— dp递推

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题解: 1. 用a[]数组记录第二行的数字,用dp[]记录没一列放的地雷数.如果第一列的地雷数d ...

  5. jquery在线扫雷

    <扫雷>是一款大众类的益智小游戏,于1992年发行.游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷. 在线试玩 http://hovertree.com/te ...

  6. wpf版扫雷游戏

    近来觉得wpf做出来的界面很拉风,自己也很喜欢搞些小游戏,感觉这做出来的会很炫,很装逼,(满足自己的一点小小的虚荣心)于是就去自学,发现感觉很不错,可是属性N多,太多了,而且质料也少,很多不会用,只会 ...

  7. Java课程设计——扫雷(winmine)

    因为是我的课程设计,要是有冲突就不好了,转载注明出处!!! 程序很简单,毕竟我是搞acm的,我就只介绍一下闪光点. 中心空白搜索的时候,我用的DFS: 有一点是要注意的,就是JFrame不支持重画,还 ...

  8. Java GUI编程-(项目代码_扫雷_弹钢琴)

    --扫雷 package com;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionLis ...

  9. js版扫雷(可直接运行试玩)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 从ZoomEye API 到 Weblogic 弱口令扫描

    参考资料: ZoomEye API: https://www.zoomeye.org/api/doc Weblogic-Weakpassword-Scnner: https://github.com/ ...

  2. JS window.name跨域封装

    JS window.name 跨域封装 function CrossDomainName(target, agent, callback, security) { if (typeof target ...

  3. C++类型转换 -- 由其他类型转换到自定义类型

    由其他类型转换到自定义类型 由其他类型(如int,double)向自定义类的转换是由构造函数来实现,只有当类的定义和实现中提供了合适的构造函数,转换才能通过. /******************* ...

  4. option和 usb-serial驱动基本区别

    option.c This driver exists because the "normal" serial driver doesn't work too well   wit ...

  5. 11.python3标准库--使用进程、线程和协程提供并发性

    ''' python提供了一些复杂的工具用于管理使用进程和线程的并发操作. 通过应用这些计数,使用这些模块并发地运行作业的各个部分,即便是一些相当简单的程序也可以更快的运行 subprocess提供了 ...

  6. Linux 基础目录和命令

    Linux 标准目录结构   初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存 ...

  7. Appium+python 一个简单的登录测试实例

    # coding=utf-8 from appium import webdriver import time import unittest import os import HTMLTestRun ...

  8. csu 1547(01背包)

    1547: Rectangle Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 996  Solved: 277[Submit][Status][Web ...

  9. iOS开发:用DES对字符串加解密

    参考http://www.cnblogs.com/janken/archive/2012/04/05/2432930.html,做了个小修改,实现PHP,JAVA,Objective-c加解密结果相同 ...

  10. Hadoop(一)Hadoop的简介与源码编译

    一 Hadoop简介 1.1Hadoop产生的背景 1. HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加, ...