题目描写叙述:

定义合法的括号序列例如以下:

1 空序列是一个合法的序列

2 假设S是合法的序列。则(S)和[S]也是合法的序列

3 假设A和B是合法的序列。则AB也是合法的序列

比如:以下的都是合法的括号序列

(),  [],  (()),  ([]),  ()[],  ()[()]

以下的都是非法的括号序列

(,  [,  ),  )(,  ([)],  ([(]

给定一个由'(',  ')',  '[', 和 ']' 组成的序列,找出以该序列为子序列的最短合法序列。

思路:真是经典的题目。区间DP。题目竟然有陷阱,输入可能是空串,所以用scanf的时候,会不读入,就少了一次读入,wa

所以用gets

//	Accepted	C++	1.002	2015-03-12 13:34:47
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int inf= 0x3f3f3f3f;
int dp[105][105];
char str[105];
int n; bool match(char a,char b)
{
if(a=='('&&b==')') return true;
else if(a=='[' && b==']') return true;
return false;
}
void print(int l,int r) //递归打印解
{
if(l>r) return ;
if(l==r)
{
if(str[l]=='('||str[l]==')') printf("()");
else if(str[l]=='['||str[l]==']') printf("[]");
return ;
}
if(match(str[l],str[r])&&dp[l][r]==dp[l+1][r-1])
//别忘了match(str[l],str[r]),由于dp[l][r]==dp[l+1][r-1]时候,不一定外側括号匹配,非常easy错
{
putchar(str[l]);
print(l+1,r-1);
putchar(str[r]);
return ;
}
for(int k=l;k<r;k++)
if(dp[l][r]==dp[l][k]+dp[k+1][r])
{
print(l,k);
print(k+1,r);
return;
}
}
int main()
{
int T;
scanf("%d",&T);
getchar();//吃掉T之后的换行
while(T--)
{
getchar(); //每一个输入前都有一个空行
gets(str+1);
n=strlen(str+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++) dp[i][i]=1; //边界
for(int l=1;l<n;l++)
for(int p=1;p+l<=n;p++)
{
dp[p][p+l] = inf ;
if(match(str[p],str[p+l])) dp[p][p+l]=dp[p+1][p+l-1];
for(int k=p ; k<p+l ;k++)
dp[p][p+l]=min(dp[p][p+l],dp[p][k]+dp[k+1][p+l]);
}
if(n) print(1,n);
puts("");
if(T) putchar('\n'); //输出之间要输出空行
}
return 0;
}

最新文章

  1. PAT 1007. 素数对猜想 (20)
  2. Learning OpenCV
  3. 添加无线服务wzcsvc服务,Eventlog服务
  4. oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
  5. 2015年10月22日CSS学习笔记
  6. schedule
  7. 自动生成 Lambda查询和排序,从些查询列表so easy
  8. markdown实现
  9. Dockerfile注意事项
  10. tensorflow dropout函数应用
  11. spring装配Bean过程
  12. [动态规划]P1004 方格取数
  13. LeetCode(52)-Remove Linked List Elements
  14. P2251 质量检测--洛谷luogu
  15. 关于k8s安装脚本方面的草稿
  16. 剑指Offer 43. 左旋转字符串 (字符串)
  17. 部分手机(如三星)的Listview列表会自动加上黑线解决办法
  18. MQTT 单片机端讲解
  19. CVE-2017-8570漏洞利用
  20. 17.泛型.md

热门文章

  1. CentOS7.4 系统下 Tomcat 启动慢解决方法
  2. 数组中的逆序对(Java实现)
  3. JMeter—定时器(八)
  4. 微信小程序-下拉事件(onPullDownRefresh)不触发
  5. MySQL中MyISAM与InnoDB区别及选择
  6. 将mssql数据库高版本迁移到低版本
  7. python 机器学习中模型评估和调参
  8. kafka 配置文件参数详解
  9. Ubuntu18.04安装Tensorflow+cuda+cuDNN
  10. 使用ElasticSearch服务从MySQL同步数据实现搜索即时提示与全文搜索功能