POJ 1141 Brackets Sequence
括号序列,刘汝佳黑书上的经典例题。但是这道题要输出我们最后得到的添加括号最少的序列,
输出序列确实很麻烦,参考了题解,才勉勉强强写出来,以后还得把这道题敲一遍。
/*Accepted 288K 32MS C++ 1862B 2012-07-23 11:46:07*/#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; #define o -2 #define lr -3const int MAXN = 105; int f[MAXN][MAXN], record[MAXN][MAXN]; char s[MAXN]; const int inf = 0x3f3f3f3f;bool judge( int l, int r) {if( s[l] == '(' && s[r] == ')' || s[l] == '[' && s[r] == ']')return true;return false; }int dps(int l, int r) {int &ans = f[l][r], i;if(ans != inf)return ans;if(l > r)return 0;if(l == r)return record[l][r] = o, ans = 1;for( i = l; i < r; i ++)if( dps(l, i) + dps(i + 1, r) < ans)ans = f[l][i] + f[i + 1][r], record[l][r] = i;if( judge(l, r) && dps(l + 1, r - 1) < ans)ans = f[l + 1][r - 1], record[l][r] = lr;return ans; }void print(int l, int r) {switch( record[l][r]){case o :{if( s[l] == '(' || s[l] == '['){printf( "%c", s[l]);print( l + 1, r);printf( s[l] == '(' ? ")" : "]");}else{printf(s[l] == ')' ? "(" : "[");printf("%c", s[l]);print(l + 1, r);}break;}case lr:{printf( "%c", s[l]);print(l + 1, r - 1);printf( "%c", s[r]);break;}case -1:return;default:print( l, record[l][r]), print(record[l][r] + 1, r);break;} }int main() {while( scanf( "%s", s + 1) == 1){memset(f, 0x3f, sizeof f);memset(record, -1, sizeof record);dps(1, strlen(s + 1));print(1, strlen(s + 1));printf( "\n");}return 0; }
转载于:https://www.cnblogs.com/Yu2012/archive/2012/07/23/2604722.html
POJ 1141 Brackets Sequence相关推荐
- POJ 1141 Brackets Sequence(动态规划)
题目大意 给你一个括号串(包括'(',')','[',']'),长度不超过 100,问你怎么添加最少的括号,使得这个括号串是合法的,输出添加括号后的合法括号串 做法分析 以长度划分阶段,定义状态:f[ ...
- POJ 2955 Brackets (区间DP)
题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)
整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...
- COJ-1271 Brackets Sequence
斌牛出的校赛题 1271: Brackets Sequence Time Limit: 1 Sec Memory Limit: 128 MB Submit: 92 Solved: 36 [Subm ...
- UVA1626 / ZOJ1463 Brackets sequence 区间DP
简单区间DP (有空串... ...) Brackets sequence Time Limit: 4500MS Memory Limit: Unknown 64bit IO Format: ...
- uva 1626 - Brackets sequence
// // main.cpp // uva 1626 - Brackets sequence/*这一题应该是经典的矩阵类似问题.显然 需要使用两个变量来表示最终的结果.设 dp[i][j]表示第i个位 ...
- POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]
http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...
- POJ 2955 Brackets(括号匹配一)
题目链接:http://poj.org/problem?id=2955 题目大意:给你一串字符串,求最大的括号匹配数. 解题思路: 设dp[i][j]是[i,j]的最大括号匹配对数. 则得到状态转移方 ...
- [POJ 3709] K-Anonymous Sequence(斜率优化dp / 动态维护凸包)
K-Anonymous Sequence 看了两年前自己的博客,真的好青涩,连 markdown 都不太会用. 确实观赏感不是很好. 学习真的是慢慢积累的过程,以前感觉理解很困难的事,随着知识的增长, ...
最新文章
- redis在微服务领域的贡献
- 缓存穿透、并发和雪崩那些事
- 聊聊高并发(六)实现几种自旋锁
- java虚拟机06-内存分区/新生代、老年代
- 虫术python绝技_《圣济总录》
- python用scrapy爬虫豆瓣_Python-用Scrapy爬取豆瓣电影
- Linux 建立ftp站点
- 移动互联应用技术和计算机网络技术,移动互联应用技术团队介绍
- c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
- 解决无线路由器无法进行账号认证上网的问题
- 360浏览器显示没网络连接服务器,360浏览器无法连接网络?怎么办?
- php 汉字拼音字典排序,按拼音排序的小技巧
- 腾讯云Ubuntu服务器挂载阿里云盘
- weight decay
- 网易互娱2017实习生招聘在线笔试--源代码编译
- python提取cad坐标_教你一个CAD坐标提取的小技巧
- 安装远程连接Ubuntu Server 的图形界面——x2go远程连接桌面
- 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
- learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用
- 金立android 7.1.1,金立新手机参数曝光!10000mAh电池 运行安卓7.1,能否打个翻身仗...