牛客练习赛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来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...
随机推荐
- http之cdn介绍
百度百科:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调度等功能 ...
- linux和windows下,C/C++开发的延时函数,sleep函数
简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include < ...
- SpringBoot的yml配置文件
1.在src\main\resources下创建application.yml配置文件 spring: datasource: driver-class-name: com.mysql.jdbc.Dr ...
- 基于Web的漏洞利用
1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...
- CF939F
好神奇的dp... 首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数 那么有转移:dp[i][j]=min(dp[i-1][j],dp[i ...
- C++ Primer 笔记——智能指针
1.新的标准库提供了两种智能指针类型,shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指的对象.标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shar ...
- 论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)
论文源址:https://arxiv.org/abs/1605.06409 开源代码:https://github.com/PureDiors/pytorch_RFCN 摘要 提出了基于区域的全卷积网 ...
- android开发默认图标怎么换?
首先要在资源文件放入想换的图标图片拖到drawable-XX文件夹下, 然后打开AndroidManifest.xml这个配置清单文件找 到application标签里的这句android:icon= ...
- lua 日期的一些函数
--根据日期获取星期几 function getWeekNum(strDate) local ymd = Split(strDate,"-") t = ]),month=]),da ...
- 多线程外排序解决大数据排序问题2(最小堆并行k路归并)
转自:AIfred 事实证明外排序的效率主要依赖于磁盘,归并阶段采用K路归并可以显著减少IO量,最小堆并行k路归并,效率倍增. 二路归并的思路会导致非常多冗余的磁盘访问,两组两组合并确定的是当前的相对 ...