括号匹配问题(动态规划)
来源:互联网 发布:淘宝数据包怎么导出 编辑:程序博客网 时间:2024/05/01 07:53
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
- 输入
- 第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100 - 输出
- 对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
- 样例输入
4[]([])[]((]([)]
- 样例输出
0032
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define N 102#define INF 1e9int result[N][N]; //保存从i 到 j所需要的最少括号数char s[N];int min(int m,int n){return m <= n ? m : n;}int Min(int i,int j){ if(result[i][j]!=INF) return result[i][j]; else { for(int t=i;t<j;t++) { int tempa=Min(i,t); int tempb=Min(t+1,j); //如果第i 和 第j 匹配的话,那么result[i][j]=result[i+1][j-1] if(s[i-1]=='('&&s[j-1]==')'||(s[i-1]=='['&&s[j-1]==']')) result[i][j]=min(result[i][j],result[i+1][j-1]); result[i][j]=min(result[i][j],tempa+tempb); } return result[i][j]; }}int main(){ int n,T,i,j; cin>>T; while(T--) { scanf("%s",s); n=strlen(s); for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) { result[i][j]=INF; } result[n][n]=1; for(i=1;i<n;i++) { result[i][i]=1; result[i+1][i]=0; } cout<<Min(1,n)<<endl; } return 0;}/*1(([)2*/
- 括号匹配问题(动态规划)
- 动态规划 括号匹配
- nyoj 15括号匹配 (动态规划)
- nyoj-括号匹配(二)---动态规划
- NYOJ-括号匹配(二)-动态规划
- NYIST 15 括号匹配(二) 动态规划
- NYoj 15 括号匹配(二)[动态规划.有点难]
- NYOJ-15 括号匹配(二) 动态规划 递归
- 动态规划 :POJ 1141 括号匹配
- hdu 4283 动态规划 类似括号匹配
- poj 2955 动态规划--括号匹配
- 动态规划交错匹配问题
- [ACM] 携程预赛第一场 括号匹配 (动态规划)
- 括号匹配(二)--侥幸通过,用动态规划的思想
- [DP]携程预赛第一场 括号匹配 (动态规划)
- 关于括号匹配数目的动态规划算法的解决方法
- FZU 2030 括号问题 (括号匹配)
- 括号匹配问题(nyoj2)
- xml定义属性
- 黑马程序员_Java基础(数据类型、Java操作符、数组排序方法)
- xml定义属性2
- List Set和Map
- CentOS nasm 安装
- 括号匹配问题(动态规划)
- Bluebox Security最新提报Android漏洞的初步探讨
- 字符串和字符数组之间的转换
- 黑马程序员——集合(下)
- 大数据存储
- 临界区,互斥量,信号量,事件的区别
- 处理UnicodeDecodeError: ‘XXX' codec can't decode bytes in position...的问题
- nasm:fatal:unable to open output file
- 交通灯系统的学习