[原创]POJ 2955 Brackets [区间DP]【动态规划】
[原创]POJ 2955 Brackets [区间DP]【动态规划】
2016-08-27 14:49:48 Tabris_ 阅读数:420
博客爬取于2020-06-14 22:43:37
以下为正文
版权声明:本文为Tabris原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/52335175
题目链接: http://poj.org/problem?id=2955
---------------------------------.
Brackets
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 6430 Accepted: 3443
Description
We give the following inductive definition of a “regular brackets” sequence:
the empty sequence is a regular brackets sequence,
if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and
if a and b are regular brackets sequences, then ab is a regular brackets sequence.
no other sequence is a regular brackets sequence
For instance, all of the following character sequences are regular brackets sequences:
(), [], (()), ()[], ()[()]
while the following character sequences are not:
(, ], )(, ([)], ([(]
Given a brackets sequence of characters a1a2 … an, your goal is to find the length of the longest regular brackets sequence that is a subsequence of s. That is, you wish to find the largest m such that for indices i1, i2, …, im where 1 ≤ i1 < i2 < … < im ≤ n, ai1ai2 … aim is a regular brackets sequence.
Given the initial sequence ([([]])], the longest regular brackets subsequence is [([])].
Input
The input test file will contain multiple test cases. Each input test case consists of a single line containing only the characters (, ), [, and ]; each input test will have length between 1 and 100, inclusive. The end-of-file is marked by a line containing the word “end” and should not be processed.
Output
For each input case, the program should print the length of the longest possible regular brackets subsequence on a single line.
Sample Input
((()))
()()()
([]])
)[)(
([][][)
end
Sample Output
6
6
4
0
6
题目大意:就是问你 整个区间内 不连续的能匹配上的括号的总数
解题思路:
区间DP
dp[i][j] = i~j 区间内能够匹配的括号的个数
很简单 详见代码吧
附本题代码
----------------------------------------.
1 | //#include <bits/stdc++.h> |