zoukankan      html  css  js  c++  java
  • Luogu_1944 最长括号匹配

    题目链接

    动态规划的方式:

    1. 上一个括号或者上一段合法序列的前一个括号和当前位置形成 (A),[A] 型合法序列;

    2. 该位置所在的当前合法序列和之前的某一段与其相邻的序列组成 AB 型合法序列。

    转移方程 dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2]。

    连着两道题了都没有把转移的方式考虑全面,每次都是只过样例……

     1 #include <queue>
     2 #include <cstdio>
     3 #include <cctype>
     4 #include <cstring>
     5 #include <iostream>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 const int maxn = 1000000 + 10;
    10 int n, a[maxn], dp[maxn], pos; char str[maxn];
    11 
    12 int main(int argc, char const *argv[])
    13 {
    14   freopen("nanjolno.in", "r", stdin);
    15   freopen("nanjolno.out", "w", stdout);
    16 
    17   scanf("%s", str + 1), n = strlen(str + 1);
    18   for(int i = 1; i <= n; ++i) switch( str[i] ) {
    19     case '[': a[i] = 1; break;
    20     case '(': a[i] = 2; break;
    21     case ')': a[i] = 3; break;
    22     case ']': a[i] = 4; break;
    23     default: printf("Tsuki ga kirei.
    ");
    24   }
    25   for(int i = 1; i <= n; ++i) if( a[i] > 2 ) {
    26     if( a[i - 1 - dp[i - 1]] + a[i] == 5 ) dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];
    27     if( dp[i] > dp[pos] ) pos = i;
    28   }
    29   for(int i = pos - dp[pos] + 1; i <= pos; ++i) printf("%c", str[i]);
    30 
    31   fclose(stdin), fclose(stdout);
    32   return 0;
    33 }

     —— 唯有无形之物,在时光中永存。

  • 相关阅读:
    P5664 Emiya 家今天的饭
    P3944 肮脏的牧师
    P1233 木棍加工
    P4017 最大食物链计数
    P1287 盒子与球
    Java之未来已来(1)
    java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4
    java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法
    SpringBoot集成Caffeine作本地缓存
    联想拯救者-触摸板手势
  • 原文地址:https://www.cnblogs.com/nanjoqin/p/10064055.html
Copyright © 2011-2022 走看看