zoukankan      html  css  js  c++  java
  • Codeforces 5C Longest Regular Bracket Sequence(DP+括号匹配)

    题目链接:http://codeforces.com/problemset/problem/5/C

    题目大意:
    给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次数。
    解题思路:
    设dp[i]为到i的最大括号匹配,
    我们每次遇到一个'('就将其下标存入栈中,每次遇到')'就取出当前栈中里它最近的'('下标即栈顶t。
    不能直接dp[i]=i-t+1,比如(()()())这样的例子就会出错,应为dp[i]=dp[i-1]+i-t+1。

    代码

     1 #include<bits/stdc++.h>
     2 #define lc(a) (a<<1)
     3 #define rc(a) (a<<1|1)
     4 #define MID(a,b) ((a+b)>>1)
     5 #define fin(name)  freopen(name,"r",stdin)
     6 #define fout(name) freopen(name,"w",stdout)
     7 #define clr(arr,val) memset(arr,val,sizeof(arr))
     8 #define _for(i,start,end) for(int i=start;i<=end;i++)
     9 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
    10 using namespace std;
    11 typedef long long LL;
    12 const int N=1e6+5;
    13 const int INF=0x3f3f3f3f;
    14 const double eps=1e-10;
    15 
    16 int dp[N];
    17 stack<int>sk;
    18 
    19 int main(){
    20     FAST_IO;
    21     string str;
    22     cin>>str;
    23     int len=0,cnt=0;
    24     for(int i=0;i<str.length();i++){
    25         if(str[i]=='(')
    26             sk.push(i);
    27         else{
    28             if(!sk.empty()){
    29                 int t=sk.top();
    30                 sk.pop();
    31                 dp[i]=dp[t-1]+i-t+1;
    32                 if(dp[i]>len){
    33                     len=dp[i];
    34                     cnt=1;
    35                 }
    36                 else if(dp[i]==len) 
    37                     cnt++;
    38             }
    39         }
    40     }
    41     if(len==0)
    42         cout<<"0 1"<<endl;
    43     else
    44         cout<<len<<" "<<cnt<<endl;
    45     return 0;
    46 }
  • 相关阅读:
    【转】MySQL导入数据乱码的分析与解决
    查看MySQL的warning
    修改MySQL字符集
    【转】PHP乱码问题,UTF8(乱码)
    马哥Linux——第一周作业
    马哥Linux——第二周作业
    .Net内部运行过程
    Html那些事
    面向对象图解、类型转换图解,写给.Net新手
    javascript对于DOM加强
  • 原文地址:https://www.cnblogs.com/fu3638/p/9892268.html
Copyright © 2011-2022 走看看