博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Brackets(区间dp)
阅读量:5265 次
发布时间:2019-06-14

本文共 2221 字,大约阅读时间需要 7 分钟。

Brackets
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 8017   Accepted: 4257

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 i1i2, …, im where 1 ≤i1 < i2 < … < im ≤ nai1ai2 … 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

【题目大意】
最大括号匹配
【思路】
区间dp 枚举长度
【code】
#include
#include
#include
using namespace std;char s[101];int dp[101][101];int main(){ while(gets(s)!=NULL) { if(s[0]=='e')break; memset(dp,0,sizeof(dp)); int len=strlen(s); for(int i=1;i<=len;i++) for(int j=0,k=i;k<=len;j++,k++) { if(s[j]=='('&&s[k]==')'||s[j]=='['&&s[k]==']') dp[j][k]=dp[j+1][k-1]+2; for(int p=j;p<=k;p++) dp[j][k]=max(dp[j][k],dp[j][p]+dp[p+1][k]); } printf("%d\n",dp[0][len-1]); } return 0;}

 

  

转载于:https://www.cnblogs.com/zzyh/p/7157800.html

你可能感兴趣的文章
python json.dumps 中的ensure_ascii 参数引起的中文编码问题
查看>>
Python中利用原始套接字进行网络编程的示例
查看>>
Python使用numpy实现BP神经网络
查看>>
反射常用API
查看>>
Java多线程-线程的调度(守护线程)
查看>>
NO.9章 树(遍历、BST、AVL、并查集、堆、哈夫曼)
查看>>
C#与.NET程序员面试宝典 封皮(非常重要的图)
查看>>
[转载]建立时间和保持时间
查看>>
自我介绍
查看>>
第七周
查看>>
13. (转) Android一些布局属性详解
查看>>
arm-linux-g++ 下交叉编译libxml2
查看>>
windowsXP同步Internet时间
查看>>
Typescript编译设置
查看>>
批量删除垃圾帖
查看>>
三目运算符
查看>>
js 判断当前是什么浏览器
查看>>
关于购物车添加按钮的动画(vue.js)
查看>>
JAVA环境安装配置
查看>>
js瀑布流 原理实现揭秘 javascript 原生实现
查看>>