博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1141 Brackets Sequence
阅读量:4325 次
发布时间: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

你可能感兴趣的文章
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>