毕竟是个渣,写完一遍之后又按LRJ的写了一遍,再写了一遍递归版,最终加上输出解部分

括号序列

定义如下规则序列(字符串):

空序列是规则序列;

如果S是规则序列,那么(S)和[S]也是规则序列;

如果A和B都是规则序列,那么AB也是规则序列。

例如,下面的字符串都是规则序列:

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

这几个则不是规则序列:

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

现在,给出一些由‘(’,‘)’,‘[’,‘]’构成的序列,请添加尽量少的括号,得到一个规则序列。

分析

  • 很容易想到的递归版本
uses
math;
var
s:string;
function answer(l,r:longint):longint;
var mini,k:longint;
begin
if l=r then exit(1)
else if (s[l]='(')and(s[r]=')')or(s[l]='[')and(s[r]=']') then exit(answer(l+1,r-1))
else if l<r then begin
mini:=maxint;
for k:=l to r-1 do
mini:=min(mini,answer(l,k)+answer(k+1,r));
exit(mini);
end else exit(0);
end;
begin
readln(s);
writeln(answer(1,length(s)));
end.
  • 稍微做下改动,同时为了方便输出解(输出时再判定一次)

d(s)表示s的解

现存在两种情况

当s形为(s')时,转移到d(s')

当length(s)>1 时,转移到d(sA)+d(sB)

边界条件

length(s)=1时 d(s)=1

其他为0

{2015-9-24 括号序列}
{program by Chuck}{误} program noip_dp_1;
uses
math;
const
maxn=1000;
type
LL=longint;
var
d:array[1..maxn,1..maxn] of LL;
i,j,k,n:LL;
st:ansistring;
boo:boolean;
function match(l,r:char):boolean;
begin
if (l='(') and (r=')') or (l='[') and (r=']') then exit(true)
else exit(false);
end; procedure print(l,r:Longint);
var
k,ans:longint;
begin
if l>r then exit;
if l=r then
begin
if (st[l]=')')or(st[l]='(') then write('()')
else write('[]');
exit;
end;
ans:=d[l][r];
if match(st[l],st[r]) and (ans=d[l+1][r-1])then begin
write(st[l]);
print(l+1,r-1);
write(st[r]);
end else
for k:=l to r-1 do
if ans=d[l][k]+d[k+1][r] then
begin
print(l,k);
print(k+1,r);
exit;
end;
end;
begin
assign(input,'dp1.in');
assign(output,'dp1.out');
reset(input);
rewrite(output);
readln(st);
n:=length(st);
fillchar(d,sizeof(d),0);
for i:=1 to n do
d[i][i]:=1;
for i:=n-1 downto 1 do
for j:=i+1 to n do
begin
d[i][j]:=n;
boo:=match(st[i],st[j]);
if boo then
d[i][j]:=min(d[i][j],d[i+1][j-1]);
for k:=i to j-1 do
d[i][j]:=min(d[i][j],d[i][k]+d[k+1][j]);
end;
writeln(d[1][n]);
print(1,n);
close(input);
close(output);
end.

为了这个程序煞费苦心,我真是渣渣到爆了……

自己好不容易写的一大段因为head hole big open被删了,删完才发现稍作改动就是对的啊……

于是因为生病实在没有坚持下来,看了题解再打的一遍。。

明天九月最后一天,距离初赛还有11天,

我天嘞困死了……

DP专题——括号序列的更多相关文章

  1. 合法括号序列(dp+组合数学)

    键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...

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

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

  3. Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)

    大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...

  4. 【区间DP】codevs3657 括号序列题解

    题目描述 Description 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合法的,那么AB ...

  5. BZOJ4350: 括号序列再战猪猪侠【区间DP】

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

  6. 括号序列(区间dp)

    括号序列(区间dp) 输入一个长度不超过100的,由"(",")","[",")"组成的序列,请添加尽量少的括号,得到一 ...

  7. 括号序列的dp问题模型

    括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...

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

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

  9. bzoj 4244 括号序列dp

    将各种情况绕环等看作括号序列,括号内的区域上下都需要累加答案,左右也是 f[i][j] 代表 前i个车站已经处理完的有j个左括号的最小权值 我们可以发现,更新的来源来自于 i-1, 和 i 将上 描述 ...

随机推荐

  1. 一行代码解释.net事件与委托

    button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; delegat ...

  2. EF框架 转载

    http://www.cnblogs.com/zrdm/p/5060360.html Model First Model First我们称之为"模型优先",这里的模型指的是&quo ...

  3. [ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方

    一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧! package com.views { import f ...

  4. UNIX网络编程-send、recv、sendto、recvfrom详解

    send.recv和sendto.recvfrom,一般情况下,send.recv在TCP协议下使用,sendto.recvfrom在UDP协议下使用,也可以在TCP协议下使用,不过用的很少. 1.s ...

  5. Nginx+Nodejs搭建图片服务器

    图片上传请求由Node处理,图片访问请求由Nginx处理. 1.Nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log; ...

  6. xcode 打静态库.a文件

    原文地址:http://blog.csdn.net/pjk1129/article/details/7255163 核心命令:lipo -info 地址.查看支持的类型,如armv7 lipo -cr ...

  7. 41. Unique Binary Search Trees && Unique Binary Search Trees II

    Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...

  8. MVC项目内无法添加System.Web.Optimization

    MVC项目内无法添加System.Web.Optimization Nuget:Install-PackageMicrosoft.AspNet.Web.Optimization

  9. C# 操作pem 文件

    using Dscf.Bpl.InformationAuditBpl; using Dscf.Bpl.ProductBpl; using Dscf.Global.CommonAduit; using ...

  10. NHibernate系列文章一:NHibernate介绍

    摘要 NHibernate是一个成熟的开源的面向对象的.net映射框架.大量的实际项目中正在使用该框架.他是建立在ADO.Net基础之上.目前的版本是NHibernate 4.0.4.本系列文章都是基 ...