【问题描述】

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

(1)空序列是合法的

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

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

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

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

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

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

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

【输入】

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

【输出】

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

【样例输入】

([()

【样例输出】

2
【样例说明】
最少添加2个括号可以得到合法的序列:()[()]或([()])
【数据范围】S的长度<=100 (最多100个字符)。

解题思路
 program kuohao;
uses math;
const maxn=;
var
f:Array[..maxn,..maxn] of longint;
s:string;
p,i,j,k,min,flag:Longint;
begin
readln(s);
for i:= to length(s) do f[i,i]:=;
for p:= to length(s) do//枚举次数
for i:= to length(s)-p do//枚举起点
begin
min:=maxlongint;
flag:=;
j:=i+p;
if ((s[i]='(') and(s[j]=')')) or((s[i]='[')and (s[j]=']'))
then
begin
f[i,j]:=f[i+,j-];
flag:=;
end;
for k:=i to j- do//枚举决策
begin
if f[i,k]+f[k+,j]<min then min:=f[i,k]+f[k+,j];
end;
if (min<f[i,j]) or (flag=) then f[i,j]:=min;
writeln(f[,length(s)]);
end.


CODEVS 3657 括号序列的更多相关文章

  1. Codevs (3657括号序列 )

    题目链接:传送门 题目大意:中文题,略 题目思路:区间DP 这个题是问需要添加多少个括号使之成为合法括号序列,那么我们可以先求有多少合法的括号匹配,然后用字符串长度减去匹配的括号数就行 状态转移方程主 ...

  2. codevs——T3657 括号序列

    http://codevs.cn/problem/3657/  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description ...

  3. codevs 2058 括号序列

    2058 括号序列  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 定义满足以下规则字符串为规则序列,否 ...

  4. 138.括号序列(区间型DP)

    3657 括号序列  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 我们用以下规则定义一个合法的括号序列: ...

  5. 括号序列问题 uva 1626 poj 1141【区间dp】

    首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...

  6. BZOJ4350: 括号序列再战猪猪侠

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

  7. DP专题——括号序列

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

  8. 递归:codevs 1251 括号

    codevs 1251 括号  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺 ...

  9. 【BZOJ】2209: [Jsoi2011]括号序列(splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2209 splay又犯逗........upd1那里的sum忘记赋值反............. 本题 ...

随机推荐

  1. 消息系统Flume与Kafka的区别

    首先Flume和Kafka都是消息系统,但是它俩也有着很多不同的地方,Flume更趋向于消息采集系统,而Kafka更趋向于消息缓存系统. [一]设计上的不同 Flume是消息采集系统,它主要解决问题是 ...

  2. RGBa颜色 css3的Alpha通道支持

    CSS3中,RGBa 为颜色声明添加Alpha通道. RGB值被指定使用3个8位无符号整数(0 – 255)并分别代表红色.蓝色.和绿色.增加的一个alpha通道并不是一个颜色通道——它只是用来指定除 ...

  3. HashMap(JDK1.8)源码剖析

    在JDK1.6中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的Entity都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找 ...

  4. [Laravel] 获取执行的Sql

    获取数据库操作记录 $queries = DB::getQueryLog(); //取最后一条是 $lastSql = end($queries); 不过这样输出的,不是真正的sql,输出的是类似PD ...

  5. 浅谈android应用性能之内存(转)

    如何测试一个APP的内存占用情况?一个APP占用的内存分哪些部分?如何检查一个APP是否存在内存泄漏? 一.Android内存介绍: 在java开发过程中,是通过new来为对象分配内存的,而内存的释放 ...

  6. ServletContext当全局变量的使用

    ServletContext对象 1,作用:JavaWeb应用的一个全局变量,一个应用只有一个ServletContext对象,在应用启动时,容器就会创建该对象 2,获得ServletContext对 ...

  7. scala学习笔记:集合

    scala> 1 to 10 res9: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9 ...

  8. OpenID说明

    OpenID使用手册 摘要: OpenID是一种开放.离散式的用于用户数字标识的开源框架.在网络应用日益充斥的今天,作为终端用户的我们不得不在每个网站上设置帐号,并管理众多的帐号.而采用OpenID技 ...

  9. textLayout在快速输入清除时报错解决方法

    var tf:TextFlow; var len:int = tf.numChildren;for (var i:int = 0; i < len; i += 1){ tf.removeChil ...

  10. 关于main函数的定义

     很多人甚至市面上的一些书籍,都使用了void main( ),其实这是错误的.C/C++中从来没有定义过void main( ).C++之父Bjarne Stroustrup在他的主页上的FAQ中明 ...