牛客练习赛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来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...
随机推荐
- ionic2 子页面隐藏去掉底部tabs导航,子页面全占满显示方法(至今为止发现的最靠谱的方法)
项目中遇到 tabs 字页面 可以用以下代码隐藏的方式: imports: [ BrowserModule, // IonicModule.forRoot(MyApp), HttpModule, Io ...
- python 之面向对象的三大特性
面向对象的三大特性 继承 继承和组合 继承进阶 封装 封装(有待完善) 多态 多态
- 一.定时任务详解https://i.cnblogs.com/EditPosts.aspx
定时任务的详解 h每小时运行 d每天运行 w每周运行 m每个月运行 中毒时查看系统定时任务是否有病毒的脚本. crontab -l 查看用户的定时任务 crontab -e 进入编辑界面增加 ...
- laravel 路由模型绑定
我们在使用路由的时候一个很常见的使用场景就是根据资源 ID 查询资源信息: Route::get('task/{id}', function ($id) { $task = \App\Models\T ...
- laravel 资源控制器
Artisan 生成器来生成一个资源控制器(在之前命名后加上 --resource 选项) php artisan make:controller PostController --resource ...
- ural1018依赖背包-边权
其实用点权更简单,但这种做法是边权的 /* 依赖背包问题 dp[u][k]表示u结点往下共走k步的最大值 */ #include<iostream> #include<cstring ...
- java设置字符串编码、转码
Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一 ...
- VMware 虚拟机 Ubuntu 系统执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) 解决:UP BROADCAST MULTICAST 问题
VMware 虚拟机 ifconfig没有net_addr地址.Bcast.Mask的解决方法 使用时间长的虚拟机,会莫名其妙的连接不上网 在终端中,使用ifconfig命令查看Ubuntu系统的IP ...
- sublime快捷键的使用
Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...
- idea svn配置报错:Can't use Subversion command line client:svn
1. 在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svnSubversion command ...