补题链接:Here

转移方程的具体含义我在代码注释里写出来了, 很好理解

这道题的难点在于如何表示状态, 一旦找到状态表示方法

只要根据题意做转移就行了

最后的答案就是 \(dp[n][0][0] + dp[n][1][0]\)

即最后一个位置有火的方案数加上最后一个位置没有火的方案数

注意不要忘了一开始的初始化 \(dp[0][0][0] = dp[0][0][1] = 1\)

using ll = long long;
const int mod = 1e9 + 7, N = 1e6 + 10;
ll dp[N][2][2];
void solve() {
string s; cin >> s;
s = " " + s;
int n = s.size() - 1;
dp[0][0][0] = dp[0][0][1] = 1;
for (int i = 1; i <= n; i++) {
if (s[i] == '0') { // 当前和左右都无
dp[i][0][0] += dp[i - 1][0][0], dp[i][0][0] %= mod;
}
else if (s[i] == '1') { // 当前无 左右 有一个
dp[i][0][0] += dp[i - 1][1][0]; dp[i][0][0] %= mod; // 左有
dp[i][0][1] += dp[i - 1][0][0], dp[i][0][1] %= mod; // 右有
}
else if (s[i] == '2') { // 当前无 左右均有
dp[i][0][1] += dp[i - 1][1][1], dp[i][0][1] %= mod; // 左右有
}
else if (s[i] == '*') { // 当前有 左右任意
dp[i][1][0] += (dp[i - 1][0][1] + dp[i - 1][1][1]),
dp[i][1][0] %= mod; // 当前有 右无 然后 左有或者没有
dp[i][1][1] += (dp[i - 1][0][1] + dp[i - 1][1][1]),
dp[i][1][1] %= mod; // 当前有 右有 然后 左有或者没有
}
else if (s[i] == '?') { // 当前任意
dp[i][1][0] += (dp[i - 1][0][1] + dp[i - 1][1][1]),
dp[i][1][0] %= mod; // 当前为火 右无
dp[i][1][1] += (dp[i - 1][0][1] + dp[i - 1][1][1]),
dp[i][1][1] %= mod; // 当前和右 为火
dp[i][0][1] += (dp[i - 1][0][0] + dp[i - 1][1][0]),
dp[i][0][1] %= mod; // 当前无 右火
dp[i][0][0] += (dp[i - 1][0][0] + dp[i - 1][1][0]),
dp[i][0][0] %= mod; // 当前无 右无
}
}
cout << (dp[n][1][0] + dp[n][0][0]) % mod <<
"\n"; // 最后一格有 和 无的方案
}

【每日一题】25.「火」皇家烈焰 (字符串DP)的更多相关文章

  1. [每日一题2020.06.09] leetcode #97 交错字符串 dp

    题目链接 利用动态规划的思想, 对于每种状态(i, j)来说都有(i-1, j) 和 (i,j-1) 需要注意的问题 : 初始化的问题,先把i=0和j=0的状态都初始化后才可以进行dp否则发生数组越界 ...

  2. 牛客小白月赛19 E 「火」烈火燎原 (思维,树)

    牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  3. 「USACO16OPEN」「LuoguP3147」262144(区间dp

    P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...

  4. 嘴巴题3 「BZOJ1412」[ZJOI2009] 狼和羊的故事

    「BZOJ1412」[ZJOI2009] 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Or ...

  5. 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...

  6. 嘴巴题4 「BZOJ1827」[Usaco2010 Mar] gather 奶牛大集会

    1827: [Usaco2010 Mar]gather 奶牛大集会 Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...

  7. 「C」 数组、字符串、指针

    一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...

  8. 【每日一题】UVA - 1368 DNA Consensus String 字符串+贪心+阅读题

    https://cn.vjudge.net/problem/UVA-1368 二维的hamming距离算法: For binary strings a and b the Hamming distan ...

  9. 「LuoguP2365」 任务安排(dp

    题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti. 在每批任务开 ...

  10. LG2145 「JSOI2007」祖码 区间DP

    问题描述 LG2145 题解 把颜色相同的一段看做一个点. 然后类似于合唱队区间DP即可. 但是这题好像出过一些情况,导致我包括题解区所有人需要特判最后一个点. \(\mathrm{Code}\) # ...

随机推荐

  1. 从一个 Demo 说起 Dubbo3

    简介 2017年的9月份,阿里宣布重启Dubbo的开发维护,并且后续又将Dubbo捐献给了Apache,经过多年的发展已经发布到3.X版本了,Dubbo重启维护之后是否有值得我们期待的功能呢,下面就来 ...

  2. 使用reposync工具将yum安装包保存到本地的方法

    使用reposync工具将yum安装包保存到本地的方法 版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin Anolis7/centos7 1.reposync 1.1. ...

  3. 使用Spring Cache高效处理缓存数据

    Spring Cache是Spring框架提供的一种缓存抽象,可以有效地处理缓存数据.使用Spring Cache可以简化开发过程,提高应用程序的性能和可扩展性. 本文将详细介绍如何使用Spring ...

  4. Fast ORM 读写分离功能使用方式

    Fast Framework 作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer O ...

  5. HDU-2586 How far away?

    There are n houses in the village and some bidirectional roads connecting them. Every day peole alwa ...

  6. lower_bound() upper_bound()函数

    转自http://blog.csdn.net/niushuai666/article/details/6734403 函数lower_bound()在first和last中的前闭后开区间进行二分查找, ...

  7. Linux磁盘专题-常用分区命令

    划分分区 fdisk 专门用于划分MBR类型的分区.(mbr分区类型在linx中也叫msdos) 注意:fdisk在centos7上已经可以用来划分gpt类型的分区. 详细不说了,N年之前学习过 gd ...

  8. 如何用python脚本制作生成CANdbc

    最近在工作中,有同事拿了一个excel的dbc表格,在用官方的dbc工具一个一个创建信号,大概看了一下共累计20多个节点,300多个信号,居然在手动处理,顿感无语.. 于是在网络上搜相关的dbc 通过 ...

  9. 劫持最新版 QQNT / QQ / TIM 客户端 ClientKeys

    针对 腾讯官网 最新发布的 QQNT 9.9.6 与 QQ 9.7.21 新版本客户端全面更新截取代码 大伙应该都知道自从 QQ 9.7.20 版本起就已经不能通过模拟网页快捷登录来截取 Uin 跟 ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

    文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题 四.证明:在最坏情况下,HEAPSORT 的时间复杂度是Ω (nlgn). 文心一言: 要证明在最坏情况下,HEAP ...