Brackets(区间dp)
来源:互联网 发布:公安大数据应用现状 编辑:程序博客网 时间:2024/06/05 03:31
Brackets
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:
<code>(), [], (()), ()[], ()[()]
while the following character sequences are not:
<code>(, ], )(, ([)], ([(]
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 ofs. That is, you wish to find the largest m such that for indicesi1, i2, …, im where 1 ≤i1 < i2 < … < im ≤ n, ai1ai2 …aim is a regular brackets sequence.
Given the initial sequence <code>([([]])], the longest regular brackets subsequence is <code>[([])].
Input
The input test file will contain multiple test cases. Each input test case consists of a single line containing only the characters <code>(, <code>), <code>[, and <code>]; 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
66406
#include <iostream>#include <string.h>#include <algorithm>using namespace std;int dp[500][500];int main(){ char a[500]; while(cin >> a && a[0] != 'e'){ int len = strlen(a); memset(dp, 0, sizeof(dp)); for(int l = 1; l < len; l++) for(int i = 0; i < len - 1; i++){//线段长度递推 int j = i + l; if((a[i]=='[' && a[j]==']') || (a[i]=='(' && a[j]==')')) dp[i][j] = dp[i+1][j-1] + 2; for(int k = i; k < j; k++) dp[i][j] = max(dp[i][j], dp[i][k]+dp[k+1][j]); } cout << dp[0][len-1] << endl; } return 0;}
- Brackets(区间DP)
- Brackets(区间dp)
- POJ2955 Brackets(区间DP)
- Brackets Sequence (区间dp)
- Brackets(poj-2955)(区间dp)
- POJ 1141 Brackets Sequence(区间DP)
- pku 2955 Brackets(区间dp)
- POJ 1141 Brackets Sequence (区间DP)
- POJ 2955-Brackets(区间DP)
- poj 2955 Brackets(区间DP)
- POJ 题目2955 Brackets(区间dp)
- poj 1141 Brackets Sequence(区间dp)
- poj 2955 Brackets(区间dp)
- POJ 2955 Brackets (区间DP)
- poj 2955 Brackets(区间dp)
- poj 1141 Brackets Sequence(区间dp)
- poj 2955 Brackets (区间dp)
- POJ - 2955 Brackets(区间dp)
- 10049---java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
- java 从本地拿取图片给前端显示
- C++学习笔记 1st —— 让我们来看看cout输出吧
- P1214 [USACO1.4]等差数列 Arithmetic Progressions
- java方法
- Brackets(区间dp)
- 达内学习笔记——new
- HDU 5790 Prefix
- Lua迭代器
- css中边框的显示,合并
- 20160807 软件开发 二分暴力
- P1211 [USACO1.3]牛式 Prime Cryptarithm
- java初级之6常量与变量
- 3341数据结构实验之二叉树二:遍历二叉树