codeforces629C Famil Door and Brackets (dp)
题意:给你一个长度为n的括号匹配串(不一定恰好匹配),让你在这个串的前面加p串和后面加上q串,使得这个括号串平衡(平衡的含义是对于任意位置的括号前缀和大于等于0,且最后的前缀和为0)。
思路:枚举这个字符串前面p字符串的长度,我们可以使得p字符串的前缀和大于等于字符串s的最小前缀和minx,那么p+s就符合前缀和大于等于0,然后q的方案数也能确定了。我们用dp[i][j]表示i个括号平衡度为j的方案数,那么可以先预处理出来dp的值。然后我们算出s字符串的最小前缀和minx,最后我们只要枚举p的长度i和平衡度j,那么sum+=dp[i][j]*dp[n-m-i][per_s+j],(per_s是整个s字符串的平衡度,per_s+j为q的平衡度).
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
#define clc(a,b) memset(a,b,sizeof(a))
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn= ;
const int inf=0x3f3f3f3f;
char s[maxn];
const int mod=;
LL dp[][]; int main()
{
int n,m;
scanf("%d%d",&n,&m);
scanf("%s",s+);
clc(dp,);
dp[][]=;
for(int i=; i<=n-m; i++)
{
for(int j=; j<=i; j++)
{
if(j>)
dp[i][j]=(dp[i][j]+dp[i-][j-])%mod;
dp[i][j]=(dp[i][j]+dp[i-][j+])%mod;
}
}
int minx=inf;
int per_s=;
for(int i=; i<=m; i++)
{
if(s[i]=='(')
per_s++;
else
per_s--;
minx=min(minx,per_s);
}
LL sum=;
for(int i=; i<=n-m; i++)
for(int j=; j<=i; j++)
{
if(j+minx>=&&j+per_s<=n-m-i)
sum=(sum+dp[i][j]*dp[n-m-i][j+per_s])%mod;
}
cout<<sum<<endl;
return ;
}
codeforces629C Famil Door and Brackets (dp)的更多相关文章
- Codeforces 629C Famil Door and Brackets(DP)
题目大概说给一个长m的括号序列s,要在其前面和后面添加括号使其变为合法的长度n的括号序列,p+s+q,问有几种方式.(合法的括号序列当且仅当左括号总数等于右括号总数且任何一个前缀左括号数大于等于右括号 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
随机推荐
- Linux主机在LNMP环境中同时运行多个PHP版本
这次遇到的问题是,客户网站已经使用PHP5.4运行多个网站程序,但是新安装的程序需要使用PHP5.3. 从我之前的经验来看,给网站更换PHP版本,可能会带来意想不到的后果.比如,之前某客户Discuz ...
- OpenCASCADE 基础
OpenCASCADE 基础 转载▼ 一直在用OCC作项目,但这方面的中文资料很少,看来OCC在中国还不是十分普及: 后来,项目中使用OCC和DirectX结合使用,取得了很好的效果: 随着OCC6. ...
- Timer组件
1.常用属性 Interval 用于获取或设置Timer组件Tick事件发生的时间间隔,属性值不能小于1 制作左右飘摇窗体 private void timer1_Tick(object sender ...
- SQL导入
然后将新窗口中所有内容放到你需要复制的那个数据库中->新建查询->修改第一行 USE[新数据库名]-> 运行这段代码->刷新数据库 基本就是选择源数据库和目标数据库,特别注意的 ...
- C#常用正则过滤
//string regexstr = @"<[^>]*>"; //去除所有的标签 //@"<script[^>]*?>.*?< ...
- 1行代码为每个Controller自定义“TabBar”-b
这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航 ...
- shell中的内建命令, 函数和外部命令
转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令. 有些命令是由于其必要性才内建的 ...
- perl的输出缓冲
今天写一个小脚本的时候,需要即时输出当前进度到命令行上,并即时将重要数据写入报告文件中.但是perl默认是有输出缓冲的,显示到命令行上必须以\n结尾才行,输出到文件中,回车了都不行,非得要等缓冲区 ...
- int指令理解
以下是王爽老师的<汇编语言>中第十五章中的一段程序代码,其功能是增加9号中断的功能,当按下Esc键时屏幕中显示的字母改变颜色 assume cs:codesg,ss:stack,ds:da ...
- plsql 书写命名规范
俗话说事不预则废,无规矩不成方圆. 对sql脚本程序的设计,个人认为应该是从编码规范开始. 前段时间公司一些同事提交的脚本,风格迥异,让我审核起来倍感难受,丝毫没有审核代码的快感. 特整理了公司部分常 ...