题目大意

给你一个括号串(包括'(',')','[',']'),长度不超过 100,问你怎么添加最少的括号,使得这个括号串是合法的,输出添加括号后的合法括号串

做法分析

以长度划分阶段,定义状态:f[i][j] 表示,s(i)~s(j) 这一个字串需要添加多少括号使得其变为合法字串,状态转移:

f[i][j]=min{ f[i][k]+f[k+1][j] }

有一个特殊的地方就是:s(i) 和 s(j) 是两个匹配的括号,即:s(i)=='(' && s(j)==')' || s(i)=='[' && s[j]==']',那么 f[i][j] 还要和 f[i+1][j-1] 相比取最小者

最后输出的时候,递归的输出就行

这是今天无意间翻到的,不知道是什么时候看见了没有想法的一道题,没想到今天瞬间就把思路给秒了...这么水的DP,当时怎么会没想法呢?

参考代码

POJ 1141

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4
 5 using namespace std;
 6
 7 const int N=106;
 8
 9 char buff[N];
10 int f[N][N], pre[N][N];
11
12 void Print(int L, int R)
13 {
14     if(L>R) return;
15     if(L==R)
16     {
17         if(buff[L]=='[' || buff[L]==']') printf("[]");
18         else printf("()");
19     }
20     else if(pre[L][R]==-1)
21     {
22         printf("%c", buff[L]);
23         Print(L+1, R-1);
24         printf("%c", buff[R]);
25     }
26     else Print(L, pre[L][R]), Print(pre[L][R]+1, R);
27 }
28
29 int main()
30 {
31     while(gets(buff))
32     {
33         int n=(int)strlen(buff);
34         memset(f, 0, sizeof f);
35         for(int i=0; i<n; i++) f[i][i]=1, pre[i][i]=0;
36         for(int len=2; len<=n; len++)
37         {
38             for(int i=0; i+len-1<n; i++)
39             {
40                 int j=i+len-1;
41                 f[i][j]=0x3ffffff;
42                 if(buff[i]=='[' && buff[j]==']' || buff[i]=='(' && buff[j]==')')
43                     f[i][j]=f[i+1][j-1], pre[i][j]=-1;
44                 for(int k=i; k<j; k++)
45                     if(f[i][j]>f[i][k]+f[k+1][j])
46                         f[i][j]=f[i][k]+f[k+1][j], pre[i][j]=k;
47             }
48         }
49         Print(0, n-1), printf("\n");
50     }
51     return 0;
52 }

题目链接 & AC通道

POJ 1141 Brackets Sequence

转载于:https://www.cnblogs.com/zhj5chengfeng/archive/2013/05/07/3066020.html

POJ 1141 Brackets Sequence(动态规划)相关推荐

  1. POJ 1141 Brackets Sequence

    括号序列,刘汝佳黑书上的经典例题.但是这道题要输出我们最后得到的添加括号最少的序列, 输出序列确实很麻烦,参考了题解,才勉勉强强写出来,以后还得把这道题敲一遍. /*Accepted 288K 32M ...

  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. J - Milking Time POJ - 3616(dp动态规划)

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

最新文章

  1. C++ sizeof 运算符的使用
  2. ssh 登陆mysql数据库_mysql命令行客户端如何通过ssh服务器连接数据库啊?
  3. 利用DDA算法得到直线上的像素点坐标
  4. 找出数组中不重复的值php_PHP查找数值数组中不重复最大和最小的10个数的方法...
  5. T-SQL 将存储过程结果插入到表中
  6. 编程题:编写一个函数string_copy()完成strcpy()的作用,并验证。
  7. php备份和恢复源码,PHP数据库备份还原类
  8. 利用python绘制雪景图_python绘制雪景图
  9. 用指针交换两个数_LeetCode双指针系列
  10. C#使用SharpZipLib实现zip压缩
  11. 工业大数据的应用有哪些
  12. 阿里云发布异构计算产品家族,你可以在上面模拟核爆炸
  13. Java企业微信开发_02_通讯录同步
  14. 电影院订票选座小程序 电影小程序毕业设计 毕业论文 开题报告和效果图
  15. Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询
  16. win10资源管理器——删除左侧图标(自用)
  17. 1484: 青蛙(四)
  18. 如何制作独一无二的简历?
  19. 升级AndroidX
  20. 操作系统常见驱动故障及解决方法

热门文章

  1. 数据库系统-故障恢复
  2. python爬取有道词典json报错,求帮助!
  3. RGB888转RGB666
  4. 网络文件服务器手机版,hfs网络文件服务器(个人HTTP文件服务器)
  5. android webview 播放视频
  6. 【日常训练】953. 验证外星语词典
  7. 952.验证外星语词典
  8. SVN 提示 Failed to run the WC DB work queue 错误解决
  9. Android DeadObjectException 异常 aidl通信
  10. html代码单词表,HTML标记单词表.doc