[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. 6.MySQL简介

    MySQL简介 ·点击查看MySQL官方网站 ·MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于facle旗下 ...

  2. 49、是否使用过functools中的函数?其作用是什么?

    functools模块介绍 functools用于高阶函数:指那些作用于函数或者返回其他函数的函数.通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标. functools模块的功能 pyt ...

  3. python3学习笔记.2.基础

    1.编码 默认编码是 utf-8 # -*- coding: utf-8 -*- 2.注释 单行注释  # 多行注释,用三个单引号或双引号 3.关键字 可在交互窗口查询. >>> i ...

  4. inet_addr_onlink

    /* 根据指定设备的ip配置块,判断地址a,b是否在同一子网 */ /* --邻居项要求,在同一子网中的两个设备, 至少有一个接口有相同的子网配置, --也就是说对端的in_dev->ifa_l ...

  5. (转)USB协议简介

    USB协议简介     USB是一种协议总线,即主机与设备之间的通信需要遵循一系列约定.协议内容较多,这里仅作一些简单介绍,深入学习,可参看USB规范(WWW.usb.org).     为了理解协议 ...

  6. 002_让你的linux虚拟终端五彩缤纷(1)——LS颜色设置

  7. MySQL 作业题及答案

    MySQL 测试题 一. 表关系: 请创建如下表,并创建相关约束 创建表sql如下: /* Navicat MySQL Data Transfer Source Server : 192.168.11 ...

  8. acm专题---dfs+bfs

    题目来源:http://hihocoder.com/problemset/problem/1049 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  9. Codeforces 799B - T-shirt buying(STL)

    题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...

  10. ActiveMQ objecmessage 无法调用问题。

    http://activemq.apache.org/objectmessage.html