zoukankan      html  css  js  c++  java
  • 【POJ】1141 Brackets Sequence

    经典DP问题,注意输入不要使用while(xxx != EOF),否则WA,测试数据只有一组。同样的测试数据可能有多种答案。但最小长度唯一。一定不能用while,切记。

    #include <iostream>
    using namespace std;
    #include <string>
    
    #define MAXNUM 200
    #define MAXVAL 32767
    
    string match(char []);
    
    int main() {
        string regstr;
        char str[MAXNUM];
    
        cin >>str;
        regstr = match(str);
        cout <<regstr<<endl;
    
        return 0;
    }
    
    string match(char str[]) {
        string regstr[MAXNUM][MAXNUM];
        int add[MAXNUM][MAXNUM];
        int len = strlen(str);
        int i, j, k;
    
        memset(add, 0, sizeof(add));
    
        for (i=0; i<len; i++)
            for (j=i; j<len; j++)
            {
                add[i][j] = MAXVAL;
                regstr[i][j] = "";
            }
    
        for (i=len-1; i>=0; i--) {
            for (j=i; j<len; j++) {
                if (j == i) {
                    add[i][j] = 1;
                    if (str[i] == '(' || str[i] == ')')
                        regstr[i][j] = "()";
                    if (str[i] == '[' || str[i] == ']')
                        regstr[i][j] = "[]";
                } else {if (str[i] == '(' && str[j] == ')') {
                        add[i][j] = add[i+1][j-1];
                        regstr[i][j] = "(" + regstr[i+1][j-1] + ")";
                    } else if (str[i] == '[' && str[j] == ']') {
                        add[i][j] = add[i+1][j-1];
                        regstr[i][j] = "[" + regstr[i+1][j-1] + "]";
                    }
    
                    for (k=i; k<j; k++) {
                        if (add[i][k]+add[k+1][j] < add[i][j]) {
                            add[i][j] = add[i][k] + add[k+1][j];
                            regstr[i][j] = regstr[i][k] + regstr[k+1][j];
                        }
                    }
                }
            }
        }
    
        return regstr[0][len-1];
    }
  • 相关阅读:
    linux内核编译
    字符设备驱动ioctl实现用户层内核层通信
    Linux内核完全剖析基于0.12内核
    KVM分析报告
    kvm的vmcall
    kvm源代码分析
    KVM基本概念
    linux系统调用
    UML的9种图例解析(转)
    SurfaceView的基本使用(转)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3574777.html
Copyright © 2011-2022 走看看