「火」皇家烈焰

题目描述 :
帕秋莉掌握了一种火属性魔法

由于钟爱扫雷游戏,帕秋莉把自己图书馆前的走廊看作一个一维的扫雷地图,她制造了很多烈焰,排在这条走廊内

现在帕秋莉告诉你一部分烈焰的分布情况,请你告诉她可能的情况有多少种

对于一个格子,里面会有以下几种字符:

0:这个格子没有烈焰,且其左右两个格子均没有烈焰

1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰

2:这个格子没有烈焰,且其左右两个格子中均有烈焰

*:这个格子有烈焰

?:未告诉你本格情况

输入描述:
一个字符串 ,对于100%的数据,n≤1,000,000
输出描述:
输出一行,一个整数表示答案,对 1 e 9 + 7 1e9+7 1e9+7取模

很明显的线性DP,复杂度是 O ( n ) O(n) O(n) 的,题目以火为限制,那么我们根据每个位置是否有火来设dp状态,若 d p [ i ] [ 0 / 1 ] dp[i][0/1] dp[i][0/1] 代表前 i i i 位中第 i i i 位是否有火,但是此时的状态转移限制不仅来自于第 i − 1 i-1 i−1位,还来自于 i + 1 i+1 i+1位,所以我们我们多增加一维 [ 0 / 1 ] [0/1] [0/1] 代表第 i + 1 i+1 i+1 位是否有火。只要状态找对了,接下来就按照题意转移就可。

#include<bits/stdc++.h>using namespace std;
typedef long long LL;
const int N = 1e6+7;
const int mod = 1e9+7;int dp[N][2][2];  // dp[i][0/1][0/1] 代表前i位里,当前的i、i+1位是否有火,0代表无,1代表有;
int main()
{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];  //均不为火else if(s[i]=='1'){   //i不为火,前后有一个为火dp[i][0][0] = (dp[i][0][0]+dp[i-1][1][0])%mod;dp[i][0][1] = (dp[i][0][1]+dp[i-1][0][0])%mod; }else if(s[i]=='2'){   //i不为火 ,但是i前后都需要为火dp[i][0][1] = (dp[i][0][1]+dp[i-1][1][0])%mod;}else if(s[i]=='*'){   //i位为火,i前后均不确定dp[i][1][0] = (dp[i][1][0]+dp[i-1][0][1]+dp[i-1][1][1])%mod;dp[i][1][1] = (dp[i][1][1]+dp[i-1][0][1]+dp[i-1][1][1])%mod;}else if(s[i]=='?'){   //当此位为?时,前面的所有的状态都可以转移dp[i][0][0] = (dp[i][0][0]+dp[i-1][0][0]+dp[i-1][1][0])%mod;dp[i][0][1] = (dp[i][0][1]+dp[i-1][0][0]+dp[i-1][1][0])%mod; dp[i][1][0] = (dp[i][1][0]+dp[i-1][0][1]+dp[i-1][1][1])%mod;dp[i][1][1] = (dp[i][1][1]+dp[i-1][0][1]+dp[i-1][1][1])%mod;}}cout<<(dp[n][0][0]+dp[n][1][0])%mod<<"\n";  //第n位为火和不为火的和return 0;
}

「火」皇家烈焰 (线性DP)相关推荐

  1. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  2. 【每日一题】5月7日题目精讲 「火」皇家烈焰

    链接: 「火」皇家烈焰 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: % ...

  3. 「BSOJ2900」 Angry Birds - 线性Dp+搜索

    题目描述 绿猪们的势力越来越强大了,小鸟们正在筹划如何对付这群强大的东西. 可是绿猪们派来一位绿猪巫师洗清了所有前线鸟儿的记忆.现在,他们只记得他们各自的领导,但是这是一个自由散漫的团队,必须要找到他 ...

  4. 不同的「火」在舌頭上的表現也不一樣

    ★不同的「火」在舌頭上的表現也不一樣. 舌尖属心.肺,舌中属脾.胃,舌根属肾,舌边属肝.胆. 1.舌尖紅:心火 夏主心,因此夏天心火會旺! 如果舌尖紅,伴有煩躁.口干.口舌生瘡.睡眠不好做惡夢.手足心 ...

  5. 「CEOI2019」魔法树(DP+差分启发式合并)

    「CEOI2019」魔法树 description solution 设dpi,j:idp_{i,j}:idpi,j​:i子树在jjj时刻的最大果汁量,显然dpi,jdp_{i,j}dpi,j​在jj ...

  6. 深度学习作弊,用单个参数 fit 任何数据集,这篇 19 年的论文重新「火」了

    视学算法报道 机器之心编辑部 一个参数画出大象. 据说,冯 · 诺依曼有次参加一个会议,某物理研究员在报告一个研究进展,用了一个非常复杂的模型,试图论证实验数据点都落在同一条曲线上,符合模型预期.于是 ...

  7. LOJ 2546 「JSOI2018」潜入行动——树形DP

    题目:https://loj.ac/problem/2546 dp[ i ][ j ][ 0/1 ][ 0/1 ] 表示 i 子树,用 j 个点,是否用 i , i 是否被覆盖. 注意 s1<= ...

  8. 真正的中台价值,「炒作」之后才被看见

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 中台,不再「火」了. 如果你是从2015年直接穿越而来的人,很难想象过去5年里,围绕着「中台」.「要不要建」.「适不适合」,「怎么建」,曾有 ...

  9. 传闻要被「降级」的这所211高校,让这位网红教授「救活了」

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 太原理工大学,最近着实有点火. 先是11月12日至13日,其官网一口气更新了3位「杰青」副校长,在高校任命中实属罕见之举,消息轰动一时. 再 ...

最新文章

  1. 通过rxjs的一个例子, 来学习SwitchMap的使用方法
  2. MVC Controller与ActionResult的返回值
  3. Cocos2d-x 2 0 在Windows平台下的使用
  4. css实现文字太长,显示省略号
  5. git基础管理--操作远程仓库
  6. 一般将来时语法课教案_初中英语笔试教案模板
  7. 升级到jdk1.8后 sun/io/CharToByteConverter错误及处理
  8. webots python e-puck 集群通信案例
  9. 三星note8android 9.0,三星S9/S9+计划明天推送安卓9.0正式版、S8/S8+、Note8下周推测试版...
  10. 重庆北大青鸟【学员心声】:转行是痛苦的,但决定是正确的!
  11. 学术研究如何选定方向,确定论文题目
  12. Excel怎么合并单元格
  13. SQL 中的昨天、今天和明天
  14. IntelliJ IDEA 2019 配置PHP开发环境
  15. 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点
  16. 织梦免费网站模板手机端无法更新的原因及解决
  17. 红色性格和蓝色性格的优缺点
  18. linux 查看发行版本
  19. 2022年中国互联网数据中心(IDC)行业产业链及市场现状分析(附国家绿色数据中心公示名单)[图]
  20. ITIL 4 升级大揭秘,你关心的问题都全了!

热门文章

  1. 千万级数据查询:CK、ES、RediSearch怎么选?
  2. TS(TypeScript)语法快速入门
  3. 7个秘诀让你25岁后轻松护理眼部
  4. Android APK+Dex文件反编译及回编译工具
  5. Nginx 之 Rewrite 规则
  6. Declare 语句
  7. VB.NET Declare语句
  8. superset缩略图
  9. 如何从Windows的“无法验证发布者”中解除阻止文件警告
  10. 实现 iPhone 电子书的分页显示功能