HRBUST 1834【區間dp裸題】


題意:給出一個括號序列括號類型包括'(',')','[',']'求最大的括號匹配數。

套模板即可a。

#include<stdio.h>
#include<string.h>
#include<iostream>
#define MAX 100+10
#define INF 0x1f1f1f1f
using namespace std;
char str[MAX];
int dp[MAX][MAX];
int max(int a, int b) {
    return (a > b) ? a : b;
}

bool match(char a, char b) {
    if (a == '(' && b == ')')
        return true;
    else if (a == '['&&b == ']')
        return true;
    else
        return false;
}

int main(void) {
    while (~scanf("%s", str + 1)) {
        int n = strlen(str + 1);

        memset(dp, 0, sizeof(dp));
        for (int len = 1; len <= n; len++) {
            for (int l = 1, r; (r = l + len) <= n; l++) {
                if (match(str[l], str[r])) {
                    dp[l][r] = max(dp[l + 1][r - 1] + 2, dp[l][r]);
                }
                for (int k = l; k < r; k++) {
                    dp[l][r] = max(dp[l][r], dp[l][k] + dp[k + 1][r]);

                }



            }

        }
        printf("%d\n", dp[1][n]);



    }

}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com