括号匹配问题
来源:互联网 发布:网络主播收入提成 编辑:程序博客网 时间:2024/06/05 19:35
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 107 Accepted Submission(s) : 43
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
Input
第一行输入一个正整数N,表示测试数据组数(N<=100)。
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100。
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100。
Output
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行。
Sample Input
4[]([])[]((]([)]
Sample Output
0032
Source
CodingTrip - 携程编程大赛 (预赛第一场)
经典dp问题,自己没想到,几个模糊的地方:
1.没严谨符号化(递归)定义
2.没找到子问题。
信息学竞赛的一个例子,定义A,B为合法括号串,则下列串也是合法的:
1.AB
2.(A)
3.[A]
好了,枚举子问题就好:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXR 110#define INF MAXRint dp[MAXR][MAXR];char c[MAXR];int need(int l, int r){ if(l>r) return 0; if(dp[l][r]>-1) return dp[l][r]; dp[l][r]=INF; if(l == r) return dp[l][r]=1; if(c[l]=='['&&c[r]==']' || c[l]=='('&&c[r]==')') dp[l][r]=need(l+1,r-1); for(int k=l; k<=r; k++) dp[l][r]=min(dp[l][r],need(l,k)+need(k+1,r)); return dp[l][r];}int main(){ int n; scanf(" %d",&n); while(n--){ memset(dp, -1, sizeof(dp)); scanf(" %s", c); printf("%d\n",need(0,strlen(c)-1)); } return 0;}
0 0
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 括号匹配问题
- Java 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- mysql探究之null与not null
- 做游戏
- 时间会看透一个人
- MVC 详解
- 被遗忘的青春
- 括号匹配问题
- RDD Dependency详解---Spark学习笔记9
- Ruby on Rails: button_to, link_to
- jar 重新打包
- jboss之启动加载过程详解(三)
- ”ssh: connect to host gmail.com port 22: Network is unreachable"的解决办法
- 深入理解PIPE
- 云开发应用实例:微软新战略首推云计算
- 怎样用JAVA调用DLL?