zoukankan      html  css  js  c++  java
  • HOJ 1936&POJ 2955 Brackets(区间DP)

    Brackets
    My Tags (Edit)
    Source : Stanford ACM Programming Contest 2004
    Time limit : 1 sec Memory limit : 32 M
    Submitted : 188, Accepted : 113
    5.1 Description
    We give the following inductive definition of a “regular brackets” sequence:
    • the empty sequence is a regular brackets sequence,
    • if s is a regularbrackets 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 i1,i2,…,im where 1 ≤ i1 < i2 < …< im ≤ n, ai1ai2 …aim is a regular brackets sequence.
    5.2 Example
    Given the initial sequence ([([]])], the longest regular brackets subsequence is [([])].
    5.3 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. For example:
    ((()))
    ()()()
    ([]])
    )[)(
    ([][][)
    end
    5.4 Output
    For each input case, the program should print the length of the longest possible regular brackets subsequence on a single line. For example:
    6
    6
    4
    0
    6

    一道简单的区间DP题目

    关于区间DP,可以参照这个博客
    http://blog.csdn.net/dacc123/article/details/50885903

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <algorithm>
    
    using namespace std;
    char a[105];
    int dp[105][105];
    int main()
    {
        while(scanf("%s",a+1)!=EOF)
        {
            if(a[1]=='e')
                break;
            memset(dp,0,sizeof(dp));
            int n=strlen(a+1);
            for(int len=1;len<n;len++)
            {
                for(int i=1;i+len<=n;i++)
                {
                    int j=i+len;
                    if((a[i]=='('&&a[j]==')')||(a[i]=='['&&a[j]==']'))
                        dp[i][j]=dp[i+1][j-1]+2;
                    else
                        dp[i][j]=dp[i+1][j-1];
                    for(int k=i;k<j;k++)
                    {
                        if(dp[i][j]<dp[i][k]+dp[k+1][j])
                            dp[i][j]=dp[i][k]+dp[k+1][j];
                    }
                }
            }
            printf("%d
    ",dp[1][n]);
        }
        return 0;
    }
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228770.html
Copyright © 2011-2022 走看看