牛客练习赛37-筱玛的字符串-DP递推
思路 :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递推的更多相关文章
- 牛客练习赛37C 筱玛的迷阵探险 双向搜索+字典树
题意 筱玛是个快乐的男孩子.寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险.迷阵可以看做一个的矩阵A,每个格子上有一个有一个数Ai,j.入口在左上角的(1,1)处,出口在右下角的(n,n)处.每一 ...
- 牛客练习赛36 A Rabbit的字符串(字符串最小表示法)
链接:https://ac.nowcoder.com/acm/contest/328/A来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选 ...
- 牛客练习赛24题解(搜索,DP)
A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...
- 牛客练习赛70 A.重新排列 (,字符串思维)
题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...
- 牛客练习赛 26 B题 烟花【DP】(经典)
<题目链接> 题目描述 小a有个烟花,每个烟花代表着互不相同的颜色,对于第个烟花,它有的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生种颜色的概率 输入描述: ...
- 牛客练习赛18E pocky游戏 状压dp
正解:状压dp+辅助dp 解题报告: 来还债辣!NOIp之后还是轻松很多了呢,可以一点点儿落实之前欠下的各种东西一点点提升自己!加油鸭! 是个好题,可以积累套路,启发性强,而且很难 哦而且状压它也是个 ...
- 牛客练习赛32B Xor Path (树形dp)
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵n个点的树,每个点有权值.定义表示 ...
- 牛客练习赛79E-小G的数学难题【dp,单调队列】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出\(n\)个三元组\((a_i,b_i,c_i)\). 要求选出一个集合\(S\) ...
- 牛客练习赛53 A 超越学姐爱字符串 (DP)
牛客练习赛53 超越学姐爱字符串 链接:https://ac.nowcoder.com/acm/contest/1114/A来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...
随机推荐
- Java并发编程基础-线程安全问题及JMM(volatile)
什么情况下应该使用多线程 : 线程出现的目的是什么?解决进程中多任务的实时性问题?其实简单来说,也就是解决“阻塞”的问题,阻塞的意思就是程序运行到某个函数或过程后等待某些事件发生而暂时停止 CPU 占 ...
- spring boot 自动配置原理
1).spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplic ...
- laravel 5 优化
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...
- Metasploit渗透测试模块(一)
1.Metasploit模块加载 初始化界面,成功要加载数据库 查看 Metasploit中已近存在的漏洞模块使用 show payloads
- Go如何正确的使用mysql driver
具体文章查看: https://xiequan.info/go%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%BD%BF%E7%94%A8mysql- ...
- SQL Server表关联
表关联:Hash.Nested Loops.Merge.这是实际算法,不是T-SQL中的inner/left/right/full/cross join.优化器会把这些T-SQL写法转换成上面的3种算 ...
- layui简单例子
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 记录一次因代理Controller产生的404问题
spring 3.2.4 为了给每一个controller配置一个拦截器链 import com.google.common.collect.Lists; import org.aopalliance ...
- wb 黑名单批量操作
0. 参考 yu961549745/WeiboBlackList 微博批量拉黑 1. 代码 block.py 更新内容:多线程,urllib.request 改为 requests + sessio ...
- 【Android】Android取消EditText自动获取焦点
解决方法: 在EditText的父级控件中找一个,设置成 android:focusable="true" android:focusableInTouchMode="t ...