zoukankan      html  css  js  c++  java
  • POJ 1141 括号匹配 DP

    黑书原题
    区间DP,递归输出 不看Discuss毁一生 (woc还真有空串的情况啊)

    //By SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,f[111][111];
    char s[111];
    void print(int l,int r){
        if(l==r){if(s[l]=='('||s[r]==')')printf("()");else printf("[]");}
        if(l>r)return;
        if(((s[l]=='('&&s[r]==')')||(s[l]=='['&&s[r]==']'))&&f[l][r]==f[l+1][r-1])
            putchar(s[l]),print(l+1,r-1),putchar(s[r]);
        else
            for(int k=l;k<r;k++)
                if(f[l][k]+f[k+1][r]==f[l][r]){
                    print(l,k),print(k+1,r);
                    break;
                }
    }
    int main(){
        scanf("%s",s+1);
        n=strlen(s+1);
        for(int i=1;i<=n;i++)f[i][i]=1;
        for(int len=1;len<=n;len++)
            for(int start=1;start+len<=n;start++){
                int end=start+len;
                f[start][end]=0x3fffffff;
                if((s[start]=='('&&s[end]==')')||(s[start]=='['&&s[end]==']'))
                    f[start][end]=min(f[start+1][end-1],f[start][end]);
                for(int k=start;k<end;k++)
                    f[start][end]=min(f[start][k]+f[k+1][end],f[start][end]);
            }
        print(1,n);puts("");
    }
  • 相关阅读:
    3.12
    3.11
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532289.html
Copyright © 2011-2022 走看看