一个小的线性dp。方法很多,八仙过海各显神通。

我想讲一下我的:

 #include<cstdio>
#define mod 1000000007
char s[];int dp[][][],n;//是不是雷,右边有没有雷
int main(){
scanf("%s",s+);
for(n=;s[n];n++);n--;
dp[][][]=dp[][][]=;
for(int i=;i<=n;++i)
if(s[i]=='')dp[i][][]=dp[i-][][];
else if(s[i]=='')dp[i][][]=dp[i-][][],dp[i][][]=dp[i-][][];
else if(s[i]=='')dp[i][][]=dp[i-][][];
else if(s[i]=='*')dp[i][][]=dp[i][][]=(dp[i-][][]+dp[i-][][])%mod;
else {
dp[i][][]=dp[i-][][];//
(dp[i][][]+=dp[i-][][])%=mod;dp[i][][]=dp[i-][][];//
(dp[i][][]+=dp[i-][][])%=mod;//
dp[i][][]=dp[i][][]=(dp[i-][][]+dp[i-][][])%mod;//*
}
printf("%d\n",(dp[n][][]+dp[n][][])%mod);
}

先扔在这里

我的dp含义是:dp[i][this][next]表示考虑了第i位后,this和next位置上有没有雷的方案数。

思考一下:如果你知道前面的一位是什么,这一位是什么,你就能推断出下一位是什么。

因为在一维扫雷里只有相邻的3个格子之间有约束作用。

所以我们来考虑dp[i][t][n]由什么转移而来:

如果第i位是个’0‘,那么它不是雷,它的前面一位不能是雷,后面也不能是,则dp[i][][]=dp[i-1][][](注意文字与代码的颜色对应)

如果是个’1‘,那么它不是雷,分2种情况:

它前面有而后面没有:dp[i][][]=dp[i-1][][];

它前面没有而后面有:dp[i][][]=dp[i-1][][];

如果是个’2‘,那么它不是雷,而前后都有雷:dp[i][][]=dp[i-1][][];

如果它是个雷,那么前面随意。。后面也随意。。:dp[i][][1]=dp[i][][0]=dp[i-1][0][]+dp[i-1][1][];

如果是个问号就把上面这些状态都弄一遍就好。

初状态dp[0][0][0]=dp[0][0][1]=1因为第0个格子上没有雷而它的右边有没有再说并不会被第0个格子限制。

末状态dp[n][1][0]+dp[n][0][0]因为并不在意第n个格子上有没有雷(如果它不合法那么dp值为0),而第n+1个格子上没有雷。

完毕!

mine:dp的更多相关文章

  1. UVa 10934 Dropping water balloons:dp(递推)

    题目链接:https://vjudge.net/problem/27377/origin 题意: 有一栋n层高的楼,并给你k个水球.在一定高度及以上将水球扔下,水球会摔破:在这个高度以下扔,水球不会摔 ...

  2. HDU 1028 Ignatius and the Princess III:dp or 母函数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题意: 给你一个正整数n,将n拆分成若干个正整数之和,问你有多少种方案. 注:"4 = ...

  3. AtCoder ARC097C Sorted and Sorted:dp

    传送门 题意 有 $ 2n $ 个球排成一行,其中恰好有 $ n $ 个白球和 $ n $ 个黑球.每个球上写着数字,其中白球上的数字的并集为 $ \lbrace 1 \dots n\rbrace $ ...

  4. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  5. BZOJ 1677 [Usaco2005 Jan]Sumsets 求和:dp 无限背包 / 递推【2的幂次方之和】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方 ...

  6. BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 1000 ...

  7. 地精部落:dp

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  8. [CSP-S模拟测试]:mine(DP)

    题目描述 有一个$1$维的扫雷游戏,每个格子用$*$表示有雷,用$0/1/2$表示无雷并且相邻格子中有$0/1/2$个雷.给定一个仅包含$?$.$*$.$0$.$1$.$2$的字符串$s$,问有多少种 ...

  9. 洛谷 P1466 集合 Subset Sums Label:DP

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

随机推荐

  1. 快学Scala 第十九课 (trait的abstract override使用)

    trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...

  2. electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 子进程管理 electron教程(三): ...

  3. .Net Core Serverless初体验

    什么是Serverless Serverless 是一个当今软件世界中比较新的话题.它并没有一个普遍公认的权威定义,每个人每个企业对它的解释可能都有不同,而 Serverless 正是在这种情况下不断 ...

  4. Azure pipeline 配置根据条件执行脚本

    Azure pipeline 配置根据条件执行脚本 Intro 我的应用通过 azure pipeline 来做持续集成,之前已经介绍了根据不同分支去打包不同的package,具体的就不再这里详细介绍 ...

  5. spring配置文件默认名称及位置,ContextLoaderListener监听器作用

    spring在web.xml中的配置 由于spring需要启动容器才能为其他框架提供服务,而web应用程序的入口是由web服务器控制的,因此无法在main()方法中通过创建ClassPathXmlAp ...

  6. 8.css背景

    ①Background-attachment背景图像是固定还是随着页面滚动.Scroll默认,fixed固定. ②Background-color背景颜色. ③Background-image把图像设 ...

  7. python 安装pyqt

    ---恢复内容开始--- 一.安装 1.官网:www.riverbankcomputing.com 2.使用命令安装,可以自动去官网查找与Python版本号相同的程序进行下载,比较方便,如果不是这样也 ...

  8. VMware15.5版本下安装CentOS_7_64bit

    本文介绍在VMware15.5版本下安装CentOS7. 工具准备: 1.VMware15.5版本 2.CentOS 7 64bit ISO镜像文件 一.创建虚拟机 这部分请参照我的另一个博客“一.新 ...

  9. Ubuntu18.04 安装 OpenCV 4.1.1

    1. 安装依赖包 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-confi ...

  10. Jsoup-解析HTML工具(简单爬虫工具)

    Jsoup-解析HTML工具(简单爬虫工具) 一.简介 ​ jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS ...