当前区间f(i, j)分两种情况,一种是s[i]于s[j]符合要求,那么可以转移到f[i + 1][j - 1] 这样答案只会更小或者相等

第二种是直接分成两个部分, 即f[i][j] = f[i][k] + f[k + 1][j],这个时候要取min

同时要注意第一种情况未必是最优的,要从一二两种情况里面取最优值

然后输出方面,按照答案反推,如果当前状态刚好等于其中一种情况,那么就递归下去,边界是

一个字符的时候输出两个字符。

另外学会用fgets,不用gets。fgets头文件cstdio, fgets(s, MAXN, stdin);

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112;
char s[MAXN];
int f[MAXN][MAXN], n; inline bool match(char a, char b)
{
return (a == '(' && b == ')') || (a == '[' && b == ']');
} void work()
{
REP(i, 0, n)
{
f[i + 1][i] = 0;
f[i][i] = 1;
}
for(int i = n - 1; i >= 0; i--)
REP(j, i + 1, n)
{
f[i][j] = n;
if(match(s[i], s[j])) f[i][j] = f[i + 1][j - 1];
REP(k, i, j)
f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j]);
}
} void print(int i, int j)
{
if(i > j) return;
if(i == j)
{
if(s[i] == '(' || s[i] == ')') printf("()");
else printf("[]");
return;
} int ans = f[i][j];
if(match(s[i], s[j]) && ans == f[i + 1][j - 1])
{
putchar(s[i]);
print(i + 1, j - 1);
putchar(s[j]);
return;
} REP(k, i, j)
if(ans == f[i][k] + f[k + 1][j])
{
print(i, k); print(k + 1, j);
return;
}
} void read(char* s)
{
fgets(s, MAXN, stdin);
} int main()
{
int T;
scanf("%d", &T);
read(s); read(s); while(T--)
{
read(s);
n = strlen(s) - 1;
work();
print(0, n -1);
puts("");
if(T) puts("");
read(s);
} return 0;
}

最新文章

  1. Html 两个DIV并排的问题
  2. SQL错误级别 状态 怎么定义
  3. html5,表格与框架综合布局
  4. js日期范围初始化,得到前一个月的日期
  5. 解决python2.7.9以下版本requests访问https的问题
  6. cocos2d基本类介绍 director/scene/layer/sprite
  7. Mac下配置node.js环境(Mac 10.12)
  8. 2017多校第9场 HDU 6170 Two strings DP
  9. Hadoop(十三)分析MapReduce程序
  10. Linux命令之远程下载命令:wget
  11. 萌新的IDEA_web开发笔记(未完)
  12. python基础-requests模块、异常处理、Django部署、内置函数、网络编程
  13. vue computed的执行问题
  14. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.2 Static Map with Two Layers
  15. leetcode17
  16. elasticsearch6.7 01.入门指南(2)
  17. python3.4学习笔记(二) 类型判断,异常处理,终止程序
  18. lr自带网站WebTours打不开
  19. linux 启动时文件系统错误
  20. CSS 高级选择器

热门文章

  1. [MST] Store Store in Local Storage
  2. 12、NIO、AIO、BIO二
  3. Solr DataImportHandler 配置
  4. 手机表单验证插件mvalidate的使用
  5. NET下Assembly的加载过程
  6. php7安装memcache 和 memcached 扩展
  7. 解决Linux下yum安装无法解析URL的问题
  8. 【DNN 系列】 模块开发 8.0.1
  9. javascript中的那些宽度和高度
  10. Python实现文件阅读功能(Python学习笔记)