DP专题——括号序列
毕竟是个渣,写完一遍之后又按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专题——括号序列的更多相关文章
- 合法括号序列(dp+组合数学)
键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)
大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...
- 【区间DP】codevs3657 括号序列题解
题目描述 Description 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合法的,那么AB ...
- BZOJ4350: 括号序列再战猪猪侠【区间DP】
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列, ...
- 括号序列(区间dp)
括号序列(区间dp) 输入一个长度不超过100的,由"(",")","[",")"组成的序列,请添加尽量少的括号,得到一 ...
- 括号序列的dp问题模型
括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...
- 括号序列问题 uva 1626 poj 1141【区间dp】
首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...
- bzoj 4244 括号序列dp
将各种情况绕环等看作括号序列,括号内的区域上下都需要累加答案,左右也是 f[i][j] 代表 前i个车站已经处理完的有j个左括号的最小权值 我们可以发现,更新的来源来自于 i-1, 和 i 将上 描述 ...
随机推荐
- svn 提交失败
刚刚使用SVN 提交代码时提示失败. svn: Commit failed (details follow):svn: Can't open file '/home/svn/project/db/tx ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- AX 2012 关于parts 添加
只有当引用parts的form中design属性style为 ListPage, DetailsFormMaster, or DetailsFormTransaction,才能创建FactBox pa ...
- Mono addin 学习笔记 4 再论数据扩展点(Data only extension point)
1. Attribute声明方式 定义扩展属性 [AttributeUsage(AttributeTargets.Assembly, AllowMultiple= true)] public clas ...
- 修复山寨版的J-Link
Fixed J-Link 1. Erase (1) Power On (2) Jump "ERASE"(JP3) (3) Wait for 5s (4) Break ...
- 潜入ICU的四逆汤
制附子50克(先煎2小时).干姜15克.炙甘草10克.桂枝10克.上好肉桂10克(后下).煎取药液300毫升,分三次鼻饲.这是昨天我给A先生病危的父亲开的处方:四逆汤加肉桂.桂枝. 昨天上午的门诊到2 ...
- jQuery最佳编程实践
加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址. <script t ...
- spark1.5.1环境搭建
今天一个小伙伴找我搞spark,搞了一个中午都没搭建好.心里痒痒的.索性自己重来了一遍. 本来很简单的事情,被这小子搞的老复杂了.究其原因,有以下几点: 下载的软件不对,我用的是这两个软件 spark ...
- 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法
问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...
- MySQL CMake参数说明手册
MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的.很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续 ...