题目描述 Description

我们用以下规则定义一个合法的括号序列:

(1)空序列是合法的

(2)假如S是一个合法的序列,则 (S) 和[S]都是合法的

(3)假如A 和 B 都是合法的,那么AB和BA也是合法的

例如以下是合法的括号序列:

()[](())([])()[]()[()]

以下是不合法括号序列的:

([])(([])([()

现在给定一些由'(', ')', '[', ,']'构成的序列 ,请添加尽量少的括号,得到一个合法的括号序列。

输入描述 Input Description

输入包括号序列S。含最多100个字符(四种字符: '(', ')', '[' and ']') ,都放在一行,中间没有其他多余字符。

输出描述 Output Description

使括号序列S成为合法序列需要添加最少的括号数量。

样例输入 Sample Input
([()
样例输出 Sample Output
2

最后一次把不合法的S变为合法的之前可能情况:
1)S形如(S′)或[S′]:
   只需把S′变合法即可。
   f[i,j]= f[i+1,j-1]
2)S形如(S′ 或[S′:
   先把S′变为合法的,右边加 )或]即可。
   f[i,j]= f[i+1,j]+1

3)S形如   S′)或S′]:
   先把S′化为合法的,左边加(或 [即可。
   f[i,j]= f[i,j-1]+1
4)把长度大于1的序列SiSi+1…..Sj-1Sj分为两部分:
   Si...... Sk,Sk+1….. Sj
   分别化为规则序列.
   则:f[i,j]=f[i,k]+f[k+1,j] ;i<=k<=j-1;
上述4种情况取最小值即可。

代码如下:

 //codevs3657 括号序列 区间DP
//copyright by ametake
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn=+;
const int maxint=0x3f3f3f3f;
char s[+];
int f[maxn][maxn]; int main()
{
scanf("%s",s);
int n=strlen(s);
for (int i=;i<n;i++) f[i][i]=;
for (int p=;p<n;p++)
{
for (int i=;i<n-p;i++)
{
int j=i+p;
f[i][j]=maxint;
if ((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
f[i][j]=min(f[i][j],f[i+][j-]);
if ((s[i]=='('&&s[j]!=')')||(s[i]=='['&&s[j]!=']'))
f[i][j]=min(f[i][j],f[i+][j]+);
if ((s[i]!='('&&s[j]==')')||(s[i]!='['&&s[j]==']'))
f[i][j]=min(f[i][j],f[i][j-]+);
for (int k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+][j]);
}
}
printf("%d\n",f[][n-]);
return ;
}

【区间DP】codevs3657 括号序列题解的更多相关文章

  1. [codevs3657]括号序列

    题目大意:有一列只有'(',')','[',']'构成的括号序列,求在序列中至少加上多少括号,能使该序列合法. 解题思路:区间dp. 我们以$f[i][j]$表示把区间$[i,j]$添成合法括号所需的 ...

  2. DP专题——括号序列

    毕竟是个渣,写完一遍之后又按LRJ的写了一遍,再写了一遍递归版,最终加上输出解部分 括号序列 定义如下规则序列(字符串): 空序列是规则序列: 如果S是规则序列,那么(S)和[S]也是规则序列: 如果 ...

  3. POJ2955--Brackets 区间DP入门 括号匹配

    题意很简单,就是求给出串中最大的括号匹配数目.基础题,格式基本为简单区间dp模板. #include<iostream> #include<string.h> using na ...

  4. 【UR #2】猪猪侠再战括号序列 题解

    题目链接 前言 是的没脑子选手只会做签到题. 思路分析 一开始把题目看成反转括号的状态,直接浪费 \(40\ mins\) . 我们考虑把不确定的"正确括号"转换成一个固定的括号序 ...

  5. POJ 2955 Brackets 区间DP 最大括号匹配

    http://blog.csdn.net/libin56842/article/details/9673239 http://www.cnblogs.com/ACMan/archive/2012/08 ...

  6. 【BZOJ2329/2209】[HNOI2011]括号修复/[Jsoi2011]括号序列 Splay

    [BZOJ2329/2209][HNOI2011]括号修复/[Jsoi2011]括号序列 题解:我们的Splay每个节点维护如下东西:左边有多少多余的右括号,右边有多少多余的左括号,同时为了反转操作, ...

  7. P1241 括号序列

    P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如 ...

  8. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  9. UVA1626 括号序列 Brackets sequence(区间dp)

    题目传送门(洛谷)   题目传送门(UVA) 解题思路 很显然是一个区间dp,当然记忆化搜索完全可以AC,这里说一下区间dp. 区间dp的重要特征就是需要枚举中间节点k 看一看这道题,用f[i][j] ...

随机推荐

  1. Hadoop(18)-MapReduce框架原理-WritableComparable排序和GroupingComparator分组

    1.排序概述 2.排序分类 3.WritableComparable案例 这个文件,是大数据-Hadoop生态(12)-Hadoop序列化和源码追踪的输出文件,可以看到,文件根据key,也就是手机号进 ...

  2. Linux-2.6驱动程序分层分离概念

    下面以一个按键的实验作为驱动分离时间简单学习: #include <linux/module.h> #include <linux/version.h> #include &l ...

  3. 浏览器与go语言的websocket通信

    简介WebSocket是HTML5一种新的协议.顾名思义,它在服务器和浏览器之间建立了全双工通信. 需求背景区块链测试系统web前端平台需要动态接收后端发送的状态信息改变一次测试session过程的状 ...

  4. 【BZOJ1018】[SHOI2008]堵塞的交通

    [BZOJ1018][SHOI2008]堵塞的交通 题面 bzoj 洛谷 洛谷 题解 菊队讲要用线段树维护连通性,但是好像没人写 解法一 将所有的加边删边离线,然后以最近删除时间为边权,$LCT$维护 ...

  5. HDU - 3874 Necklace (树状数组、离线处理)

    题目链接:Necklace 题意: 给出一串珠子,每个珠子有它的value,现在给出n(n<=5e4)个珠子的value(1<=value<=1e6),现在给出m(1<=m&l ...

  6. Linux命令速记

    apropos 通过命令描述,找到匹配的所有命令 ZSH 包含了自动纠错机制,可以用来来替代 Bash 作为你的命令行 shell. 速记表 https://www.maketecheasier.co ...

  7. 一个针对string的较好的散列算发djb2

    var djb2HashCode = function(key) { var hash = 5831; for(var i = 0; i < key.length; i++) { hash = ...

  8. 180918-JDK之Deflater压缩与Inflater解压

    JDK 压缩与解压工具类 在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和K ...

  9. WebGL------osg框架学习二

    今天我们继续来学习osg.js框架.上一篇我们介绍了DrawActor对象绘制操作类和Drawable可绘制对象类,我们大致知道了osg对Drawable可绘制对象的绘制流程管理.今天我们要继续介绍S ...

  10. junit测试类防止事务回滚-工作心得

    本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 12 月 06 日 原地址:https://niaobulashi.com/archives/junit-test-rollb ...