POJ 2955 Brackets (区间DP)
来源:互联网 发布:vlc 看网络电视 编辑:程序博客网 时间:2024/05/16 05:56
题意:
求区间内 最多正确的括号匹配数。
思路:
令dp[i][j] 表示i~j 区间内 最多正确的括号匹配数。
那么
dp[i][j] = max(dp[i,k] + dp[k+1][j]);
注意边界即可。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100 + 10;char s[maxn];int dp[maxn][maxn];bool match(int a,int b){ if (a == '(') return b == ')'; if (a == '[') return b == ']'; return 0;}int main(){ while(~scanf("%s",s) && s[0] != 'e'){ int len = strlen(s); for (int i = 0; i < len -1 ; ++i){ dp[i][i] = 0; if (match(s[i], s[i+1])){ dp[i][i+1] = 2; } else dp[i][i+1] = 0; } dp[len-1][len-1] = 0; for (int i = 3; i <= len; ++i){ for (int j = 0; j+i-1 < len; ++j){ int fi = j; int la = j+i-1; if (match(s[fi], s[la])){ dp[fi][la] = dp[fi+1][la-1] + 2; } else dp[fi][la] = 0; for (int k = fi; k < la; ++k){ dp[fi][la] = max(dp[fi][la], dp[fi][k] + dp[k+1][la]); } } } printf("%d\n", dp[0][len-1]); } return 0;}
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
[Submit] [Go Back] [Status] [Discuss]
- 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)
- android如何查看手机中的db文件,查看sqlite数据库的表结构
- Oracle中不同的排名函数
- 3.[easy] Palindrome Number
- Mysql 操作日常记录
- 21. Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存?
- POJ 2955 Brackets (区间DP)
- 一周开发小型RPG游戏
- 为什么要添加#include “stdafx.h”
- iOS 沙盒文件夹说明
- EasyUI 输入框加入多个清除恩钮
- 使用git 配置多仓库后再次推送return error:500的问题
- 耿耿不寐·如有隐忧
- iOS 全局竖屏 单个viewcontroller点击按钮支持横屏
- java项目上线过程