Brackets(poj-2955)(区间dp)
来源:互联网 发布:c语言的void 编辑:程序博客网 时间:2024/05/16 07:03
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
Source
#include<algorithm>#include<string.h>#include<stdio.h>#include<map>using namespace std;int dp[500][500];int cmp(char a,char b){ if(a=='['&&b==']') return 1; else if(a=='('&&b==')') return 1; else return 0;}int main(){ char s[2000]; while(scanf("%s",s)!=EOF) { if(strcmp(s,"end")==0) return 0; memset(dp,0,sizeof(dp)); int n=strlen(s); for(int i=0;i<n-1;i++) { if(cmp(s[i],s[i+1])) { dp[i][i+1]=2; } } for(int i=2;i<n;i++) { for(int j=0;j<n-i;j++) { int k=j+i; dp[j][k]=0; if(cmp(s[j],s[k])) { dp[j][k]=dp[j+1][k-1]+2; } for(int v=j;v<k;v++) { dp[j][k]=max(dp[j][v]+dp[v+1][k],dp[j][k]); } } } printf("%d\n",dp[0][n-1]); }}
- Brackets(poj-2955)(区间dp)
- POJ 2955-Brackets(区间DP)
- poj 2955 Brackets(区间DP)
- POJ 题目2955 Brackets(区间dp)
- poj 2955 Brackets(区间dp)
- POJ 2955 Brackets (区间DP)
- poj 2955 Brackets(区间dp)
- poj 2955 Brackets (区间dp)
- POJ - 2955 Brackets(区间dp)
- POJ 2955 Brackets(区间DP水题)
- POJ 2955 Brackets(区间DP)
- poj--2955--Brackets(区间dp)
- POJ 2955Brackets(区间DP)
- POJ 2955Brackets(区间DP)
- poj 2955 Brackets (区间DP)
- 【POJ 2955】Brackets(区间DP)
- POJ 2955Brackets(区间dp)
- POJ 2955 Brackets (区间DP)
- less基础知识
- 新特性总结-JDK1.5
- 【工具巧用】用vim ab/iab定制化个人输入习惯,简化命令,快速输入
- Android 蓝牙开发小项目
- 这个帖子写给不太了解PHP与API开发的人
- Brackets(poj-2955)(区间dp)
- java wait notify
- 梯度下降(Gradient Descent)算法 清晰展现过程
- 使用java调用http接口
- Qt 之 QSqlDatabase Class
- (经典demo)Maven+SSM框架实现简单的增删改查
- linux命令
- Springboot整合Mybatis分页使用Druid监控SQL日志
- 几种常用的操作系统调度策略