题目传送门(洛谷)   题目传送门(UVA)


解题思路

很显然是一个区间dp,当然记忆化搜索完全可以AC,这里说一下区间dp。

区间dp的重要特征就是需要枚举中间节点k

看一看这道题,用f[i][j]表示从i...j组成合法序列需要添加括号的个数,

很显然,当s[i]==s[j]时,f[i][j]=f[i+1][j-1],然后枚举中间点k,就能写出动态转移方程:f[i][j]=max(f[i][j],f[i][k]+f[k+1][j])

为了保证在求f[i][j]时f[i+1][j-1]、f[i][k]、f[k+1][j]已经求完,第一层的i必须要倒着枚举,第二层j一定要正着枚举(手推一下就明白了QAQ)

求出f数组后,就要考虑怎样输出,因为输出的形式是(S)或[S],所以很显然用递归输出,加几个if特判就OK了。

然而,这道题我写完代码后一直是wa,三十分钟后才发现问题。

在读入t时,我一开始用的是cin>>t;看了题解后,终于发现应该是cin>>t后面再加上getchar();为什么呢?

终于发现困扰了我接近一个小时的问题根源了——

辣鸡洛谷出错题了!!样例中的t和第一组数据间有一行空格。。。(体现出看原题的重要性)

AC代码

 #include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
#include<ctime>
#include<stack>
using namespace std;
string s;
int t,len,f[][];
void print(int l,int r){
if(l>r) return;
if(l==r){
if(s[l]=='('||s[l]==')') printf("()");
if(s[l]=='['||s[l]==']') printf("[]");
return;
}
if((f[l][r]==f[l+][r-])&&((s[l]=='('&&s[r]==')')||(s[l]=='['&&s[r]==']'))){
printf("%c",s[l]);
print(l+,r-);
printf("%c",s[r]);
return;
}
for(int k=l;k<r;k++){
if(f[l][r]==f[l][k]+f[k+][r]){
print(l,k);
print(k+,r);
return;//找到一个正解就输出并return
}
}
}
int main()
{
scanf("%d",&t);
getchar();
while(t--){
memset(f,0x3f,sizeof(f));
getline(cin,s);
getline(cin,s);
len=s.length();
if(len==){
printf("\n\n");
continue;
}
f[][]=;
for(int i=;i<len;i++) f[i][i]=,f[i][i-]=;
for(int i=len-;i>=;i--){
for(int j=i+;j<len;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]);
}
}
print(,len-);
printf("\n");
if(t) printf("\n");
}
return ;
}

UVA1626 括号序列 Brackets sequence(区间dp)的更多相关文章

  1. 洛谷 题解 UVA1626 【括号序列 Brackets sequence】

    看还没有人发记搜的题解,赶紧来水发一篇 我们定义dp[i][j]为区间i~j内最少添加几个括号才能把这个串变成正规括号序列. 考虑四种情况 i>j不存在这种子串,返回0 i==j子串长度为1无论 ...

  2. poj 1141 Brackets Sequence 区间dp,分块记录

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35049   Accepted: 101 ...

  3. POJ 1141 Brackets Sequence(区间DP, DP打印路径)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  4. UVA 1626 Brackets sequence 区间DP

    题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可.注意:输入可能是空串. 思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min( ...

  5. Ural 1183 Brackets Sequence(区间DP+记忆化搜索)

    题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...

  6. poj 1141 Brackets Sequence (区间dp)

    题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...

  7. poj 1141 Brackets Sequence ( 区间dp+输出方案 )

    http://blog.csdn.net/cc_again/article/details/10169643 http://blog.csdn.net/lijiecsu/article/details ...

  8. CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)

    1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...

  9. Brackets(括号最大匹配问题(区间dp))

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

随机推荐

  1. HTML创建链接框

    使用CSS样式创建一个漂亮的链接框吧 <!DOCTYPE html> <html> <head> <style> a:link,a:visited { ...

  2. 关于post xml的请求和响应

    关于post的请求作为开发者应该常用到,post请求的数据包含了参数和data,post参数相对比较容易理解,比如我们一个form提交,其实就是调用后台方法的,发送相关参数,这里我单独说一下关于pos ...

  3. 2018-11-15-UWP-how-to-get-the-touch-width

    title author date CreateTime categories UWP how to get the touch width lindexi 2018-11-15 18:49:12 + ...

  4. openstack stein部署手册 7. nova-compute

    # 安装程序包 yum install -y openstack-nova-compute # 变更配置文件 cd /etc/nova mv nova.conf nova.conf.org cat & ...

  5. CCF CSP/CCSP报名费优惠的方法以及常见疑问

    目录 1. 本文地址 2. 认证作用 2.1. 高校认可 2.2. 赛事认可 2.3. 企业认可 3. 报名费价格及获取优惠的方法 3.1. CCF CSP 3.2. CCF CCSP 4. 语言与I ...

  6. 一、ffmpeg理论

    一.ffmpeg三件套 ffprobe看文件属性 ffmpeg 编转码 ffplay 播放器 C:\Users\Bruce\Desktop\Temp\ffmpeg\ffmpeg\ToolPack\ff ...

  7. EF core 实现读写分离解决方案

    我们公司2019年web开发已迁移至.NET core,目前有部分平台随着用户量增加,单一数据库部署已经无法满足我们的业务需求,一直在寻找EF CORE读写分离解决方案,目前在各大技术论坛上还没找到很 ...

  8. 关于discuz论坛邮箱配置

    Discuz后台可以进行邮件设置,实现网站自动发送邮件给用户的邮箱. 在Discuz邮件设置,经常使用25端口普通发送邮件.为了数据安全,我们也可以使用SSL加密发送,设置方法很简单,只需按照下图进行 ...

  9. OGG-00303

    解决方案:因为Defgen版本不同,注释数据定义文件对应的行 *Database type:ORACLE,用*在行首注释即可

  10. $[WC2018]$通道(虚树,边分练习)

    \([WC2018]\)通道(虚树,边分练习) 感受码题的快感 这段时间真的是忙忙忙忙忙,省选之前还是露个脸,免得以后没机会了. 但是我感觉我的博客真的没啥人看,虽然我挺想要有人看的,但是自己真的没啥 ...