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 ;[]
  
} 
目录
相关文章
|
6月前
|
机器学习/深度学习 测试技术 Windows
【动态规划】【回文】【字符串】1147. 段式回文
【动态规划】【回文】【字符串】1147. 段式回文
|
6月前
|
机器学习/深度学习 算法 JavaScript
【动态规划】【回文】【字符串】1278分割回文串 III
【动态规划】【回文】【字符串】1278分割回文串 III
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
52 0
|
6月前
|
Java Go C++
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
58 0
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
Leecode 345 翻转字符串中的元音字母-双指针法
做算法的步骤: 写思路,标注步骤 先实现大头 考虑细节(越界问题、个例) 题目
|
算法 前端开发 API
字符串看到 ”回文“ 尝试双指针
字符串看到 ”回文“ 尝试双指针
63 0
回文字符串
回文字符串就是正读反读都一样的字符串,比如,“level”和“noon”都是回文字符串。要求从键盘中输入一行字符串,并判断此字符串是否为回文字符串。
143 0
回文字符串