筱玛的字符串

思路 :dp [ i ] [ j ] [ 3 ] 分别代表到第 i 位时 左括号比右括号多 j ,后面有三个状态 分别表示当前位置 S3的字符

是正在反转的,还是 反转完成的,还是没有反转的, 根据提议要求 反转的只能是一段连续区间,然后转移即可。

注意 反转完成之后 不能再开始一段新的反转过程 。

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define ll long long
#define maxn 3456
ll dp[maxn][maxn][5];
char s[maxn];
int main()
{
dp[0][0][0]=1;
scanf("%s",s+1);
int len=strlen(s+1);
for(int i=1; i<=len; i++)
{
for(int j=0; j<=i; j++)
{
if(s[i]=='?')
{
if(j!=0)
{
dp[i][j-1][0]+=(dp[i-1][j][0]);
dp[i][j-1][0]%=mod;
dp[i][j-1][1]+=(dp[i-1][j][0]+dp[i-1][j][1]);
dp[i][j-1][1]%=mod;
dp[i][j-1][2]+=(dp[i-1][j][1]+dp[i-1][j][2]);
dp[i][j-1][2]%mod;
}
dp[i][j+1][0]+=(dp[i-1][j][0]);
dp[i][j+1][0]%=mod;
dp[i][j+1][1]+=(dp[i-1][j][0]+dp[i-1][j][1]);
dp[i][j+1][1]%=mod;
dp[i][j+1][2]+=(dp[i-1][j][1]+dp[i-1][j][2]);
dp[i][j+1][2]%=mod;
}
else if(s[i]=='(')
{
if(j!=0)
dp[i][j-1][1]+=(dp[i-1][j][0]+dp[i-1][j][1]);
dp[i][j-1][1]%=mod;
dp[i][j+1][2]+=(dp[i-1][j][1]+dp[i-1][j][2]);
dp[i][j+1][2]%=mod;
dp[i][j+1][0]+=(dp[i-1][j][0]);
dp[i][j+1][0]%mod;
}
else
{
if(j!=0)
{
dp[i][j-1][2]+=(dp[i-1][j][1]+dp[i-1][j][2]);
dp[i][j-1][2]%mod;
dp[i][j-1][0]+=(dp[i-1][j][0]);
dp[i][j-1][0]%mod;
}
dp[i][j+1][1]+=(dp[i-1][j][0]+dp[i-1][j][1]);
dp[i][j+1][1]%mod;
}
}
}
ll ans=(dp[len][0][1]+dp[len][0][0]+dp[len][0][2])%mod;
printf("%lld\n",ans);
return 0;
}

  

牛客练习赛37-筱玛的字符串-DP递推的更多相关文章

  1. 牛客练习赛37C 筱玛的迷阵探险 双向搜索+字典树

    题意 筱玛是个快乐的男孩子.寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险.迷阵可以看做一个的矩阵A,每个格子上有一个有一个数Ai,j.入口在左上角的(1,1)处,出口在右下角的(n,n)处.每一 ...

  2. 牛客练习赛36 A Rabbit的字符串(字符串最小表示法)

    链接:https://ac.nowcoder.com/acm/contest/328/A来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选 ...

  3. 牛客练习赛24题解(搜索,DP)

    A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...

  4. 牛客练习赛70 A.重新排列 (,字符串思维)

    题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...

  5. 牛客练习赛 26 B题 烟花【DP】(经典)

    <题目链接> 题目描述 小a有个烟花,每个烟花代表着互不相同的颜色,对于第个烟花,它有的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生种颜色的概率 输入描述: ...

  6. 牛客练习赛18E pocky游戏 状压dp

    正解:状压dp+辅助dp 解题报告: 来还债辣!NOIp之后还是轻松很多了呢,可以一点点儿落实之前欠下的各种东西一点点提升自己!加油鸭! 是个好题,可以积累套路,启发性强,而且很难 哦而且状压它也是个 ...

  7. 牛客练习赛32B Xor Path (树形dp)

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵n个点的树,每个点有权值.定义表示 ...

  8. 牛客练习赛79E-小G的数学难题【dp,单调队列】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出\(n\)个三元组\((a_i,b_i,c_i)\). 要求选出一个集合\(S\) ...

  9. 牛客练习赛53 A 超越学姐爱字符串 (DP)

    牛客练习赛53 超越学姐爱字符串 链接:https://ac.nowcoder.com/acm/contest/1114/A来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...

随机推荐

  1. Swift 通过字符串创建控制器

    由于Swift 中新增了一个命名空间(在同一个命名空间中的文件可以直接访问而不用引入头文件)的概念 所以通过字符串创建控制器需要带上命名空间 1 首先为Bundle 写一个分类  获取命名空间 ext ...

  2. sql查询条件为空的另类写法o( ̄▽ ̄)d

    简单描述:今天看老大提交的代码,发现了一个有意思的事情,一条sql中判断条件是空,老大的写法,让我眼前一亮.直接上代码 代码: <select id="getxxxs" re ...

  3. 【深度学习】吴恩达网易公开课练习(class1 week2)

    知识点汇总 作业内容:用logistic回归对猫进行分类 numpy知识点: 查看矩阵维度: x.shape 初始化0矩阵: np.zeros((dim1, dim2)) 去掉矩阵中大小是1的维度: ...

  4. 正则化 L1 L2

    机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1ℓ1-norm和ℓ2ℓ2-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数. L1正则化和 ...

  5. react 中子组件调用父组件的方法

    1.在父组件中定义方法,并绑定在子组件上 // 在子组件中调用父组件中的方法 import React,{Component} from 'react'; import Child from './c ...

  6. 数据库解析IP,时间戳

    #解析IP SELECT INET_NTOA('168494269'); #解析时间戳 SELECT FROM_UNIXTIME('1505458308');

  7. SyntaxError: EOL while scanning string literal

    在Python 中,这个提示,一般是因为特殊字符引起的,比如换行符,比如 \ 等. 下面有几个示例: 1. 换行符 # 源错误代码 get_tabs="select b.owner,b.ta ...

  8. hive建表范例

    建表范例:支持update和delete create table aaa( id string, visitor_name string ) clustered by(id) into bucket ...

  9. 微信小程序 this和that详解及简单实例

    微信小程序中,在wx.request({});方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报 ...

  10. 集群部署时的分布式session如何实现

    tomcat + redis 这个其实还挺方便的,就是使用session的代码跟以前一样,还是基于tomcat原生的session支持即可,然后就是用一个叫做Tomcat RedisSessionMa ...