括号序列,刘汝佳黑书上的经典例题。但是这道题要输出我们最后得到的添加括号最少的序列,

输出序列确实很麻烦,参考了题解,才勉勉强强写出来,以后还得把这道题敲一遍。

/*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相关推荐

  1. POJ 1141 Brackets Sequence(动态规划)

    题目大意 给你一个括号串(包括'(',')','[',']'),长度不超过 100,问你怎么添加最少的括号,使得这个括号串是合法的,输出添加括号后的合法括号串 做法分析 以长度划分阶段,定义状态:f[ ...

  2. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  3. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  4. COJ-1271 Brackets Sequence

    斌牛出的校赛题 1271: Brackets Sequence Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 92  Solved: 36 [Subm ...

  5. UVA1626 / ZOJ1463 Brackets sequence 区间DP

    简单区间DP (有空串... ...) Brackets sequence Time Limit: 4500MS   Memory Limit: Unknown   64bit IO Format:  ...

  6. uva 1626 - Brackets sequence

    // // main.cpp // uva 1626 - Brackets sequence/*这一题应该是经典的矩阵类似问题.显然 需要使用两个变量来表示最终的结果.设 dp[i][j]表示第i个位 ...

  7. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

  8. POJ 2955 Brackets(括号匹配一)

    题目链接:http://poj.org/problem?id=2955 题目大意:给你一串字符串,求最大的括号匹配数. 解题思路: 设dp[i][j]是[i,j]的最大括号匹配对数. 则得到状态转移方 ...

  9. [POJ 3709] K-Anonymous Sequence(斜率优化dp / 动态维护凸包)

    K-Anonymous Sequence 看了两年前自己的博客,真的好青涩,连 markdown 都不太会用. 确实观赏感不是很好. 学习真的是慢慢积累的过程,以前感觉理解很困难的事,随着知识的增长, ...

最新文章

  1. redis在微服务领域的贡献
  2. 缓存穿透、并发和雪崩那些事
  3. 聊聊高并发(六)实现几种自旋锁
  4. java虚拟机06-内存分区/新生代、老年代
  5. 虫术python绝技_《圣济总录》
  6. python用scrapy爬虫豆瓣_Python-用Scrapy爬取豆瓣电影
  7. Linux 建立ftp站点
  8. 移动互联应用技术和计算机网络技术,移动互联应用技术团队介绍
  9. c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
  10. 解决无线路由器无法进行账号认证上网的问题
  11. 360浏览器显示没网络连接服务器,360浏览器无法连接网络?怎么办?
  12. php 汉字拼音字典排序,按拼音排序的小技巧
  13. 腾讯云Ubuntu服务器挂载阿里云盘
  14. weight decay
  15. 网易互娱2017实习生招聘在线笔试--源代码编译
  16. python提取cad坐标_教你一个CAD坐标提取的小技巧
  17. 安装远程连接Ubuntu Server 的图形界面——x2go远程连接桌面
  18. 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
  19. learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用
  20. 金立android 7.1.1,金立新手机参数曝光!10000mAh电池 运行安卓7.1,能否打个翻身仗...

热门文章

  1. 编写算法判别给定二叉树是否为完全二叉树_推荐一位实力超强的平安前端算法大佬:瓶子君...
  2. 在python中传统除法运算符是_在Python中使用除法运算符时,如何获取十进制值?...
  3. 第六课:GNN的可解释性
  4. ChaiNext:当前市场短期行情波动大
  5. SAP License:供应链管理和ERP的关系?
  6. static变量的作用(转)
  7. js获取jsp上下文地址
  8. jquery实现某宝放大点击切换
  9. 捡起JavaScript(3)
  10. css实现自适应正方形