区间动态规划-括号匹配(SOJ 1069)

SOJ 1069: Brackets

题意:

分析:

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char s[102];
int dp[102][102];
int main()
{
    int i, j, k;
    int len;
    int delta;
    while (~scanf("%s", s+1) && s[1]!='e')
    {
        memset(dp, 0, sizeof(dp));
        len = strlen(s+1);
        for (delta = 2; delta <= len; delta++)
        {
            for (i = 1; i <= len+1-delta; i++)
            {
                j = i + delta - 1;
                if ((s[i] == '(' && s[j] == ')') || (s[i] == '[' && s[j] == ']'))
                    dp[i][j] = dp[i + 1][j - 1] + 2;
                for (k = i;k<j; k++)
                    dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j]);
            }
        }
        printf("%d\n", dp[1][len]);
    }
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/ClearMoonlight/p/10571300.html