博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1141 Brackets Sequence
阅读量:4338 次
发布时间:2019-06-06

本文共 1589 字,大约阅读时间需要 5 分钟。

题意:给出一个括号序列,问最短的补全成合法括号序列是什么。

 

解法:区间dp。考虑dp[i][j]表示i到j区间补全需要的多余字符个数,则有状态转移方程:dp[i][j] = min{dp[i][k], dp[k + 1][j]},0 <= k < j,if(s[i]s[j] == '()' or '[]') dp[i][j] = min(dp[i][j], dp[i - 1][j - 1])。第一个方程意义为区间i到j的代价是区间i到k加区间k+1到j,枚举k,获得最优解,第二个方程意义为当s[i]和s[j]是一对匹配的括号的时候dp[i][j]就可以等于dp[i -1][j - 1],这两种情况取min。因为要输出的是补全之后的字符串,所以要记录每次的选择,递归回去输出。

PS:不要多组输入!不要多组输入!不要多组输入!别问我怎么知道的……

 

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long longusing namespace std;int ans[105][105];//记录选择,如果是-1说明选择是第二种情况,否则表示第一种情况的kstring s;void dfs(int l, int r){ if(l > r) return ; if(l == r) { if(s[l] == '(' || s[l] == ')') printf("()"); else printf("[]"); return ; } if(ans[l][r] == -1) { printf("%c", s[l]); dfs(l + 1, r - 1); printf("%c", s[r]); } else { dfs(l, ans[l][r]); dfs(ans[l][r] + 1, r); }}int main(){ cin >> s; int dp[105][105] = {0}; for(int i = 0; i < 105; i++) for(int j = i; j < 105; j++) dp[i][j] = 1000000000; for(int i = 0; i < s.size(); i++) dp[i][i] = 1; for(int j = 0; j < s.size(); j++) for(int i = j - 1; i >= 0; i--) { if(s[i] == '(' && s[j] == ')' || s[i] == '[' && s[j] == ']')//第二种情况 { dp[i][j] = dp[i + 1][j - 1]; ans[i][j] = -1; } for(int k = i; k < j; k++)//第一种情况 { if(dp[i][j] > dp[i][k] + dp[k + 1][j]) { dp[i][j] = dp[i][k] + dp[k + 1][j]; ans[i][j] = k; } } } dfs(0, s.size() - 1); puts(""); return 0;}

  

转载于:https://www.cnblogs.com/Apro/p/4871452.html

你可能感兴趣的文章
【294天】我爱刷题系列053(2017.11.26)
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
L104
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>