POJ 2955 Brackets(括号最大匹配,区间DP)
来源:互联网 发布:实对称矩阵必可对角化 编辑:程序博客网 时间:2024/05/19 19:44
原题地址
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, …, imwhere 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
求能匹配上的括号的总数
用dp[ i ][ j ]代表区间[ i , j ]内能匹配上的括号的总数
AC代码:
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;char ch[200];int dp[106][106];int main(){ while(~scanf("%s",&ch)) { if(strcmp(ch,"end")==0) { break; } int i,j,k,l; memset(dp,0,sizeof(dp)); l=strlen(ch); for(i=1;i<l;i++) { for(j=0,k=i;k<l;j++,k++) { if(ch[j]=='('&&ch[k]==')'||ch[j]=='['&&ch[k]==']') dp[j][k]=dp[j+1][k-1]+2; for(int p=j;p<k;p++) { if(dp[j][k]<dp[j][p]+dp[p+1][k]) { dp[j][k]=dp[j][p]+dp[p+1][k]; } } } } printf("%d\n",dp[0][l-1]); } return 0;}
- (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)
- [区间DP入门 括号匹配]Brackets POJ
- Brackets(区间dp之括号匹配)
- POJ2955 Brackets(区间DP,括号匹配)
- NYOJ 15 括号匹配(二) POJ 2955 Brackets(区间dp)
- 【区间DP】NYOJ 737石子合并+POJ 2955 Brackets(括号匹配)+NYOJ 15 括号匹配(二)
- 【POJ 2955】【经典区间DP 递推写法】 Brackets 【合法括号匹配成功结果+2,求最大结果】
- POJ 2955 Brackets(区间dp)【括号弧模板】
- POJ 1141 Brackets Sequence (区间dp 括号匹配 经典题)
- colorAccent,colorPrimary,colorPrimaryDark……图解
- POJ2688Cleaning Robot bfs+dfs
- ndnSIM中LCD的简单实现
- loushang 2016(基于spring3.2)的定时任务配置---spring task
- java内部类的使用
- POJ 2955 Brackets(括号最大匹配,区间DP)
- java web 听器快速入门 快速回顾
- 洛谷 P1983 车站分级
- licecap
- 列表自动滚动播放
- 模拟 Spring Bean 生命周期
- Android View.post(Runnable )
- HDU-3926-Hand in Hand
- Android通过AccessibilityService实现微信自动回复功能