lanqiaoOJ 1456 括号序列

简介: lanqiaoOJ 1456 括号序列

1.括号序列 - 蓝桥云课 (lanqiao.cn)

AcWing 3420. 括号序列(如果一直没能理解这道题,就进来看看这个吧) - AcWing

看不懂的题  下回再战吧

#include<iostream>
#include<algorithm>
#include<cstring>
 
using namespace std ;
const LL N = 5010, M = 1e9 + 7 ;
typedef long long LL ;
LL n ;
LL f[N][N] ;
char s[N] ;
LL calc(){
  memset(f,0,sizeof f)
  f[0][0] = 1;
  for(int i = 1 ; i <= n ; i ++ ){
    if(s[i] == '(') {
      for(int j = 1 ; j <= n ; j ++){
        f[i][j] = f[i-1][j-1];//不用考虑dp[i][0] 因为dp[i-1][-1]是不合法的情况 不存在 为0
      }
    }
    else {
      f[i][0] = (f[i-1][0] + f[i-1][1]) %M;
      for(int j = 1 ; j <= n ; j ++){
        f[i][j] = (f[i-1][j+1] + f[i][j-1]) % M;
      }
    }
  }
  for(int i = 0 ;i <= n ; i ++){
    if(f[n][i]) return f[n][i];//我们需要的就是长度为len添加括号的合法情况,而从前往后遍历出现的第一个有可能的情况就是需要括号数最少的情况,因为左括号可以加很多个,我们仅需添加最少的情况
  }
}
 
 
int main(){
  scanf("%s" , s+ 1) ;
  n = strlen(s+1) ;
  LL  l = calc() ;
  reverse(s+1, s+1+n) ;
  for(int i = 1 ;i <= n ; i ++){
    if(s[i] == '(') s[i] = ')' ;
    else s[i] = '(' ;
  }
  LL r = calc() ;
  printf("%lld\n" , l*r % M) ;
  return 0 ;[]
  
} 
目录
相关文章
|
7月前
|
机器学习/深度学习 测试技术 Windows
【动态规划】【回文】【字符串】1147. 段式回文
【动态规划】【回文】【字符串】1147. 段式回文
|
7月前
|
机器学习/深度学习 算法 JavaScript
【动态规划】【回文】【字符串】1278分割回文串 III
【动态规划】【回文】【字符串】1278分割回文串 III
|
7月前
字符串括号匹配
字符串括号匹配
|
7月前
括号匹配问题
括号匹配问题
44 1
|
7月前
|
Java Go C++
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
64 0
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
|
算法 前端开发 API
字符串看到 ”回文“ 尝试双指针
字符串看到 ”回文“ 尝试双指针
67 0
回文字符串
回文字符串就是正读反读都一样的字符串,比如,“level”和“noon”都是回文字符串。要求从键盘中输入一行字符串,并判断此字符串是否为回文字符串。
147 0
回文字符串
|
索引
回文对
回文对
70 0