這道題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. Linux gprof命令

    一.简介 gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂. ...

  2. geoserver 问题解决

    GeoServer的8080端口被占用了怎么办?如何修改GeoServer的端口? GeoServer管理页面的登陆地址正常情况下为:http://localhost:8080/geoserver/w ...

  3. 详解html中的元老级元素:“table”

    table标签历史悠久,在互联网出现的早期,web网页的排版主要是靠table表格,对web网页做出了不可磨灭的贡献,直到后来层叠样式表:CSS的发展完善,再配合空元素DIV,才有了今天绚丽多彩的网页 ...

  4. g++报错原因分析:expected class-name before ‘{’ token

    今天写程序的时候, 遇到这样一个错误expected class-name before ‘{’ token 最后发现原来是我的头文件声明没有加. 继承时不要忘记加基类的头文件 错误: class F ...

  5. Eloquent Observer 的小坑

    前言 最近开发新的项目不是基于完整的 laravel 框架,框架是基于 laravel ORM 的简单MVC模式.随着项目的成熟和业务需求,需要引入事件机制.简单地浏览了一下 symfony.lara ...

  6. [Selenium]对弹出的Alert窗口进行操作

    Alert alert = driver.switchTo().alert(); alert.accept();

  7. 中介者模式(QQ聊天室我觉得是个很生动的例子简单易懂)

    设计模式之中介者模式(Mediator) 一.初识中介者模式 那些年,我们一起上过的大学,班级里有班长,有团书记.想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上 ...

  8. urlrewritefilter 本地windowsxp 上正常 使用 ,但是 到linux服务器 上 则时好时坏 ,不起作用

    可能原因: tuckey.org 无法正常访问 ,urlrewrite 配置 网络 dtd 无法下载 .. 先把 urlrewrite 日志 配置好: <filter> <filte ...

  9. visual studio 各种错误汇总

    ----不定时更新 vs2012 智能提示消失解决办法 一般你可以重启vs就可以解决问题,最蛋疼的是你重启也没用.只能重置,再不行就重装vs,再不行你就重装系统......扯淡了... 重置Visua ...

  10. const与预处理宏#define的区别

    在c语言程序设计时,预处理器可以不受限制地建立宏并用它来替代值.因为预处理器只做一些文本替换,宏没有类型检测概念,也没有类型检测功能.所以预处理器的值替换会出现一些小的问题,出现的这些问题,在c++中 ...