DP-括号匹配
来源:互联网 发布:知乎最高赞答案 编辑:程序博客网 时间:2024/05/16 17:28
括号匹配(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:6
- http://acm.nyist.net/JudgeOnline/problem.php?pid=15
- 描述
- 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的- 输入
- 第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100 - 输出
- 对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
- 样例输入
4[]([])[]((]([)]
- 样例输出
0032
思路:
//f[i][j]表示从i到j所需要的最小的匹配数。
//1.当i到j-1之间没有一个能和j匹配时,f[i][j]=f[i][j-1]+1
//2.当存在k在i与j-1之间能与j匹配时,f[i][j]=min(f[i][k-1]+f[k+1][j-1]);
代码实现:
#include <iostream>#include <string>#include <string.h>using namespace std;int f[200][200];bool is(char a,char b){ if(a=='(' && b==')') return true; else if(a=='[' && b==']') return true; return false;}int main(){ int nc; cin>>nc; while(nc--){ string s; cin>>s; int p=s.size(); memset(f,0,sizeof(f)); for(int i=0;i<=p;i++) f[i][i]=1; for(int j=2;j<=p;j++){ for(int i=j-1;i>=1;i--){ f[i][j]=f[i][j-1]+1; for(int k=i;k<j;k++){ if(is(s[k-1],s[j-1])) f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j-1]); } } } cout<<f[1][p]<<endl; }return 0;}//f[i][j]表示从i到j所需要的最小的匹配数。//1.当i到j-1之间没有一个能和j匹配时,f[i][j]=f[i][j-1]+1//2.当存在k在i与j-1之间能与j匹配时,f[i][j]=min(f[i][k-1]+f[k+1][j-1]);
0 0
- 括号匹配(dp)
- DP-括号匹配
- 区间dp括号匹配
- poj2955(括号匹配DP)
- poj2955,括号匹配,区间dp
- nyoj+区间dp括号匹配
- poj2955Brackets【区间dp 括号匹配】
- POJ 1141 括号匹配 DP
- NYOJ - 括号匹配(二)(经典dp)
- POJ 2955 括号匹配,区间DP
- POJ 2955 Brackets 括号匹配 区间DP
- poj 2955 区间dp 括号匹配
- NYOJ 括号匹配(二) 区间DP
- poj1141(括号匹配-区间dp)
- NYOJ15 - UVA1626 括号匹配问题(区间dp)
- NYOJ 15 括号匹配(二) dp
- NYOJ15括号匹配(=)区间DP
- 区间dp 括号匹配 nyoj 15
- <java——基础(三)>
- 第02讲-通信编码
- 视频上传----还是有些不懂得地方
- SP2010开发和VS2010专家"食谱"--第五章节—Web部件(1)--创建可视Web部件
- 对于深度与广度的思考
- DP-括号匹配
- IntelliJ IDEA 使用
- virgo in eclipse
- 由能量项链一题引起的思考与总结
- 天主经
- SP2010开发和VS2010专家"食谱"--第五章节—Web部件(2)--创建纯代码部件(沙盒解决方案)
- 职业素养培训 笔记
- 第02讲-格式检查
- hdu4454 三分 求点到圆,然后在到矩形的最短路