POJ 2955:Brackets(区间DP)

Posted Shadowdsp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2955:Brackets(区间DP)相关的知识,希望对你有一定的参考价值。

http://poj.org/problem?id=2955

题意:给出一串字符,求括号匹配的数最多是多少。

思路:区间DP。

对于每个枚举的区间边界,如果两边可以配对成括号,那么dp[i][j] = dp[i+1][j-1] + 2,表示由上一个状态加上当前的贡献。

然后和普通的区间合并一样去更新。

 1 #include <cstring>
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <string>
 5 using namespace std;
 6 #define N 105
 7 int dp[105][105];
 8 string s;
 9 
10 int main() {
11     while(cin >> s) {
12         if(s == "end") break;
13         int n = s.length();
14         memset(dp, 0, sizeof(dp));
15         for(int len = 1; len < n; len++) {
16             for(int i = 0; i + len < n; i++) {
17                 int j = i + len;
18                 if(s[i] == ( && s[j] == ) || s[i] == [ && s[j] == ]) dp[i][j] = 2 + dp[i+1][j-1];
19                 for(int k = i; k < j; k++)
20                     if(dp[i][j] < dp[i][k] + dp[k+1][j]) dp[i][j] = dp[i][k] + dp[k+1][j];
21             }
22         }
23         printf("%d\n", dp[0][n-1]);
24     }
25     return 0;
26 }

 

以上是关于POJ 2955:Brackets(区间DP)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2955 - Brackets - [区间DP]

POJ 2955:Brackets(区间DP)

POJ 2955 Brackets 区间dp

POJ2955 Brackets(区间DP)

POJ2955 Brackets (区间DP)

Brackets POJ - 2955 (区间dp)