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 }

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

  • 相关阅读:
    JS实战 · 表单验证
    JS实战 · 仿css样式选择器
    JS实战 ·  收缩菜单表单布局
    cookie自动登录的实现
    redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动
    yum问题解决
    配置yum镜像源
    shell笔记
    CCIE总结:路由器、交换机
    云主机如何挂在磁盘
  • 原文地址:https://www.cnblogs.com/nanjoqin/p/10064055.html
Copyright © 2011-2022 走看看