区间dp_2
来源:互联网 发布:linux history 参数 编辑:程序博客网 时间:2024/05/24 00:29
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
66406
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char a[110];int dp[110][110];//dp[i][j] 表示 区间i~j有多少可匹配的括号int main(){ while(~scanf("%s",a) && a[0]!='e') { memset(dp,0,sizeof(dp)); int len; len=strlen(a); for(int i=len-1;i>=0;i--) { for(int j=i+1;j<=len-1;j++) { for(int k=i;k<=j;k++) { dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);//三个for循环找出从i到j的最优解 } //但是如果a[i]与a[j]匹配 还需要增加判断来确保最优。 if(((a[i]=='(')&&(a[j]==')'))||((a[i]=='[')&&(a[j]==']'))) dp[i][j]=max(dp[i][j],dp[i+1][j-1]+2);//在这里才增加 } } printf("%d\n",dp[0][len-1]); } return 0;}
- 区间dp_2
- dp_2
- 概率dp_2
- 动态规划-菲波那切数列--DP_2
- 区间
- 区间
- 区间选点+区间覆盖
- 插入区间,区间合并
- 区间修改,区间查询
- 区间查询
- 区间运算
- 区间树
- 区间计算
- Ruby区间
- 区间树
- 区间DP
- 区间合并
- 区间DP
- 基于opencv3.1的cnn分类系统集成
- 各个字号对应的px大小
- how to import github Oauth token
- Trie/Xor
- hdu 5810 优先队列
- 区间dp_2
- Volley与Activity生命周期联动及简单的二次封装
- POJ 1273 Drainage Ditches
- Java系统中异常封装处理
- c# 读取写入excel单元格(包括对excel的一些基本操作)【总结篇】
- git编译安装与常用命令
- tomcat如何配置项目文件夹外的虚拟子目录?
- overload与override的区别
- win系统下nodejs安装及环境配置