這道題n-m很小,可以從此入手

記f[i][j]為i個字符括號綜合為j的合法方案數

則第i個括號可以枚舉為(和),所以f[i][j]=f[i-1][j-1]+f[i-1][j+1],小心越界

再記a為序列總和,b為序列中前綴和最小值

則我們可以枚舉i,j統計答案,設前面括號的長度和權值為i,j

那麼中間的長度和權值為m,a,所以後面為n-m-i,-j-a

但是這樣子做會越界,我們可以考慮將所有後面的方案翻轉(左括變右,右括變左),方案合法,權值變負

這樣子,後面方案為n-m-i,j+a,所以不會越界,將所有方案乘起來即可

#include<bits/stdc++.h>
using namespace std;
int f[2010][2010],n,m,a,r,b;
#define mo 1000000007
char s[100010];
int main(){
    freopen("bracket.in","r",stdin);
    freopen("bracket.out","w",stdout);
    scanf("%d%d",&n,&m);
    scanf("%s",s+1);
    for(int i=1;i<=m;i++){
        if(s[i]==')')a--;
        else a++;
        b=min(b,a);
    }
    f[0][0]=1;
    for(int i=1;i<=n-m;i++)
        for(int j=0;j<=i;j++){
            if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1])%mo;
            if(j<i-1)f[i][j]=(f[i][j]+f[i-1][j+1])%mo;
        }
    for(int i=0;i<=n-m;i++)
        for(int j=-b;j<=i;j++)
            if(a+j<=n-m-i)r=(r+(long long)f[i][j]*f[n-i-m][j+a])%mo;
    printf("%d",r);
}

jzoj5804的更多相关文章

  1. JZOJ5804. 【2018.08.12提高A组模拟】简单的序列

    性质:每个位置的前缀和必须大于0,总和=0.以此dp即可. #include <iostream> #include <cstdio> #include <cstring ...

随机推荐

  1. vue-cli启动本地服务,局域网下通过ip访问不到的原因

    1.问题描述: 新开发了一个vue-cli项目,想通过手机查看效果,发现访问不到,ip地址和端口号都没错但是手机访问不到,在本机电脑浏览器输入ip端口号一样访问不到,只能通过localhost:808 ...

  2. laravel的foreach

    1.控制器 2.模板

  3. Java 8 可重复注解与类型注解

    Java 8 可重复注解与类型注解 Java 8 对注解处理提供了两点改进:可重复的注解及可用于类型的注解. // 首先要提供一个容器,MyAnnotation 才能用于可重复注解 @Target({ ...

  4. 启动多个eclipse 时,因为一个另一个启动报错,

    启动多个eclipse 时,因为一个另一个启动报错, 原因: 可能是 有一个 eclipse  中 的 tomcat  配置出错:preference中  tomcat 配置  context dec ...

  5. Perl注释文本的高亮显示规则

    sub help{ print <<EndOfUsage;\e[1;37mHELP :1. Usage :  perl $0 input output 2. Function : tran ...

  6. 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)

    传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...

  7. 2018.07.03 POJ 1279Art Gallery(半平面交)

    Art Gallery Time Limit: 1000MS Memory Limit: 10000K Description The art galleries of the new and ver ...

  8. mysql date_sub用法

    查询一天: select * from table where to_days(column_time) = to_days(now()); select * from table where dat ...

  9. Linux服务器部署系列之八—Sendmail篇

    Sendmail是目前Linux系统下面用得最广的邮件系统之一,虽然它存在一些不足,不过,目前还是有不少公司在使用它.对它的学习,也能让我们更深的了解邮件系统的运作.下面我们就来看看sendmail邮 ...

  10. 大文件webuploader的基本使用

    webuploader的简单使用 需要的文件   自备  百度很多 webuploader.js  uploader.swf  jQuery <!DOCTYPE html> <htm ...