zoukankan      html  css  js  c++  java
  • POJ 2955 Brackets

    Brackets
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 2938   Accepted: 1516

    Description

    We give the following inductive definition of a “regular brackets” sequence:

    • the empty sequence is a regular brackets sequence,
    • if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and
    • if a and b are regular brackets sequences, then ab is a regular brackets sequence.
    • no other sequence is a regular brackets sequence

    For instance, all of the following character sequences are regular brackets sequences:

    (), [], (()), ()[], ()[()]

    while the following character sequences are not:

    (, ], )(, ([)], ([(]

    Given a brackets sequence of characters a1a2 … an, your goal is to find the length of the longest regular brackets sequence that is a subsequence of s. That is, you wish to find the largest m such that for indices i1i2, …, im where 1 ≤ i1 < i2 < … < im ≤ nai1ai2 … aim is a regular brackets sequence.

    Given the initial sequence ([([]])], the longest regular brackets subsequence is [([])].

    Input

    The input test file will contain multiple test cases. Each input test case consists of a single line containing only the characters ()[, and ]; each input test will have length between 1 and 100, inclusive. The end-of-file is marked by a line containing the word “end” and should not be processed.

    Output

    For each input case, the program should print the length of the longest possible regular brackets subsequence on a single line.

    Sample Input

    ((()))
    ()()()
    ([]])
    )[)(
    ([][][)
    end

    Sample Output

    6
    6
    4
    0
    6

    Source

     
    解题:


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <vector>
     6 #include <climits>
     7 #include <algorithm>
     8 #include <cmath>
     9 #define LL long long
    10 using namespace std;
    11 const int maxn = 102;
    12 char str[maxn<<1];
    13 int dp[maxn][maxn];
    14 int main() {
    15     int i,j,k,len,t,ans;
    16     while(gets(str)&&strcmp(str,"end")) {
    17         len = strlen(str);
    18         memset(dp,0,sizeof(dp));
    19         ans = 0;
    20         for(i = 0; i < len; i++) {
    21             for(j = 0,k = i; k < len; k++,j++) {
    22                 if((str[j] == '(' && str[k] == ')') || (str[j] == '[' && str[k] == ']')) {
    23                     dp[j][k] = dp[j+1][k-1] + 2;
    24                 }
    25                 for(t = j+1; t < k; t++)
    26                     if(dp[j][t]+dp[t][k] > dp[j][k]) dp[j][k] = dp[j][t]+dp[t][k];
    27                 if(dp[j][k] > ans) ans = dp[j][k];
    28             }
    29 
    30         }
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    b4a专用压缩库(国外免费)
    使用php从pc端下载apk到android手持终端并安装(比如把枪)
    快速搭建电子商务网站以及app
    【转】C#如何创建泛型类T的实例
    【转】C# 之泛型详解
    【转】Windows Server 2016 安装 IIS 服务时提示指定备用源路径
    C# json字符串转为对象
    【转】C#模拟http 发送post或get请求
    【转】Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
    Webapi文件上传
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3845234.html
Copyright © 2011-2022 走看看