键盘上有左括号(,右括号),和退格键-,共三个键。

牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列。

每按一次左括号(,字符串末尾追加一个左括号(

每按一次右括号),字符串末尾追加一个右括号)

每按一次退格键-,会删掉字符串的最后一个字符,

特别的,如果字符串为空,牛牛也可以按退格,但是什么都不会发生。

输出方案数对p取模,注意p可能不是质数。

注:只要按键方法不同,就是不同的方案,即使得到的序列一样。

Solution

这题和其他关于括号序列的题不太一样,因为有了删除操作。

由于我太ZZ,然后搞了个*b方程。

设dp[i][j]表示按了i次,造出了一个长度为j的序列的方案数。

转移是dp[i][j]=dp[i-1][max(0,j-1)]+dp[i-1][j+1]

这里取max是指当序列为空时我也可以退格。

然后我们就有了一个长度为j的序列,我们要把左括号和右括号往里放,使得它是一个合法的括号序列。

其实这个方案数就是卡特兰数。

于是我们枚举长度,答案加上dp[n][i]*catalan(i/2)。

然后样例爆炸。

发现(+del和)+del最后制造出的序列是一样的,但是是两种不同的方案,但按照上面的方法dp只会计算一次。

所以删除时要考虑删什么字符。

正确转移方程:dp[i][j]=dp[i-1][max(0,j-1)]+dp[i-1][j+1]*2.

Code

#include<iostream>
#include<cstdio>
#define N 1002
using namespace std;
typedef long long ll;
int n;
ll f[N][N],dp[N][N],p,ans;
int main() {
scanf("%d%lld",&n,&p);
dp[][]=;
for(int i=;i<=n;++i)
for(int j=;j<=i;++j)
dp[i][j]=(dp[i-][max(j-,)]+*dp[i-][j+])%p;
f[][]=;
for(int i=;i<=n;++i) {
f[i][]=f[i-][];
for(int j=;j<=i;++j)
f[i][j]=(f[i-][j+]+f[i-][j-])%p;
}
for(int i=;i<=n;i+=)(ans+=(f[i][]*dp[n][i])%p)%=p;
printf("%lld\n",ans);
return ;
}

合法括号序列(dp+组合数学)的更多相关文章

  1. 九度OJ 1342:寻找最长合法括号序列II (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:898 解决:366 题目描述: 假如给你一个由'('和')'组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给 ...

  2. 九度OJ 1337:寻找最长合法括号序列 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:839 解决:179 题目描述: 给你一个长度为N的,由'('和')'组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的 ...

  3. Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)

    大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...

  4. 九度oj题目1342:寻找最长合法括号序列II

    题目1342:寻找最长合法括号序列II(25分) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:886 解决:361 题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然 ...

  5. [Jobdu] 题目1337:寻找最长合法括号序列

    题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...

  6. 九度oj 题目1342:寻找最长合法括号序列II

    题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即 ...

  7. 九度oj 题目1337:寻找最长合法括号序列

    题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...

  8. Java 第十一届 蓝桥杯 省模拟赛 合法括号序列

    合法括号序列 题目 问题描述 由1对括号,可以组成一种合法括号序列:(). 由2对括号,可以组成两种合法括号序列:()().(()). 由4对括号组成的合法括号序列一共有多少种? 答案提交 这是一道结 ...

  9. [51nod1791] 合法括号子段 DP

    ---题面--- 题解: 首先我们需要发现一个性质,在括号序列不变的情况下,括号匹配是不会变的,因此不论子串怎么取,括号匹配的关系是不会变化的.这是一个很容易发现的性质,然而我太弱,没发现. 于是可以 ...

随机推荐

  1. React Native之获取通讯录信息并实现类通讯录列表(ios android)

    React Native之获取通讯录信息并实现类通讯录列表(ios android) 一,需求分析 1,获取通讯录信息,筛选出通讯录里有多少好友在使用某个应用. 2,获取通讯录信息,实现类通讯录,可拨 ...

  2. java设计模式:概述与GoF的23种设计模式

    软件设计模式的产生背景 设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977 年,美国著名建筑大师.加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Chri ...

  3. Sigma Function

    做完这道题,我明白了人生的一个巨大道理,那就是: 其他题研究两下,做出来几百行.数论码字前研究半天,做出来十几二十行.做完特别没有成就感... 首先说下这题题意:首先,定义一个函数f[n],即为他所有 ...

  4. Unit 2.前端之html--table(表格),form(表单)标签

    一.table标签 作用:定义html表格.一个table标签元素至少包含 thead(表头),tbody(表主题),还可以有tfoot(表底部) html表格游table元素及一个或者多个tr,th ...

  5. Partition算法以及其应用详解上(Golang实现)

    最近像在看闲书一样在看一本<啊哈!算法> 当时在amazon上面闲逛挑书,看到巨多人推荐这本算法书,说深入浅出简单易懂便买来阅读.实际上作者描述算法的能力的确令人佩服.就当复习常用算法吧. ...

  6. ssm框架整合配置,用maven配置依赖jar包

    1.创建maven project 首先在pom.xml中指定工程所依赖的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0& ...

  7. 通过view实现rest api接口

    Django rest framwork之view 基于Django的View实现Json数据的返回: # _*_ encoding:utf-8 _*_ __author__ = 'LYQ' __da ...

  8. windows 10 & 禁用服务.bat

    windows 10 & 禁用服务.bat 禁用服务.bat @echo off net stop WSearch net stop wuauserv net start TrustedIns ...

  9. rabbitmq 配置

    1, 安装 apt-get install rabbitmq-server -y 2, 打开管理页面 sudo rabbitmq-plugins enable rabbitmq_management ...

  10. QTP 自动化测试--定义变量

    1 Dim suffixsuffix=get_currentdatetxt("001")