题目大意:

给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的。不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的。输出最短合法序列。

/*
比较坑的一道题,wa无数次。。。
思路就是区间dp的一般思路,dp[i][j]表示区间i~j之间最少加几个字符才能匹配成立
pre[i][j]表示在区间i~j中的两个子区间左端点
*/
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int inf=<<;
const int maxn=;
char str[maxn];
int n,dp[maxn][maxn];
pair<int,int>pre[maxn][maxn];
bool check(int i,int j){
if((str[i]=='('&&str[j]==')')||str[i]=='['&&str[j]==']')
return true;
return false;
}
void dfs(int l,int r){
if(l>r)return;
if(l==r){
if(str[l]=='['||str[l]==']')printf("[]");
if(str[l]=='('||str[l]==')')printf("()");
return;
}
if(check(l,r)&&dp[l][r]==dp[l+][r-]){
printf("%c",str[l]);
dfs(l+,r-);
printf("%c",str[r]);
return;
}
int sl=pre[l][r].first;
int sr=pre[l][r].second;
dfs(sl,sr);
dfs(sr+,r);
} int main(){
freopen("Cola.txt","r",stdin);
int T;
scanf("%d",&T);
getchar();
while(T--){
memset(pre,-,sizeof(pre));
gets(str);
gets(str);
n=strlen(str);
for(int i=;i<n;i++)dp[i][i]=;
for(int j=;j<n;j++){
for(int i=;i+j<n;i++){
dp[i][i+j]=inf;
if(check(i,i+j)){
dp[i][i+j]=dp[i+][i+j-];
pre[i][i+j]=make_pair(i+,i+j-);
}
for(int k=;k<=j;k++){
if(dp[i][i+j]>dp[i][i+k]+dp[i+k+][i+j]){
dp[i][i+j]=dp[i][i+k]+dp[i+k+][i+j];
pre[i][i+j]=make_pair(i,i+k);
}
}
}
}
dfs(,n-);
printf("\n");
if(T)printf("\n");
}
return ;
}

uva1626 Brackets sequence的更多相关文章

  1. UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)

    题目描写叙述: 定义合法的括号序列例如以下: 1 空序列是一个合法的序列 2 假设S是合法的序列.则(S)和[S]也是合法的序列 3 假设A和B是合法的序列.则AB也是合法的序列 比如:以下的都是合法 ...

  2. UVA-1626 Brackets sequence (简单区间DP)

    题目大意:给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的.不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的.输出最短合法序列. 题目分析:这是<入门经 ...

  3. POJ 题目1141 Brackets Sequence(区间DP记录路径)

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27793   Accepted: 788 ...

  4. POJ 1141 Brackets Sequence

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29502   Accepted: 840 ...

  5. POJ1141 Brackets Sequence

    Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a r ...

  6. 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence

    题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...

  7. ZOJ1463:Brackets Sequence(间隙DP)

    Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...

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

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

  9. [poj P1141] Brackets Sequence

    [poj P1141] Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K   Special Judge Description ...

随机推荐

  1. 基于欧氏距离和马氏距离的异常点检测—matlab实现

    前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X ...

  2. github 博客模板

    http://www.jianshu.com/p/d658ba3b4351 http://jekyllthemes.org/

  3. matlab之结构体数组struct

    以下内容来自于:https://blog.csdn.net/u010999396/article/details/54413615/ 要在MALTAB中实现比较复杂的编程,就不能不用struct类型. ...

  4. BZOJ 3314 [Usaco2013 Nov]Crowded Cows:单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3314 题意: N头牛在一个坐标轴上,每头牛有个高度.现给出一个距离值D. 如果某头牛在它的 ...

  5. php设计模式课程---5、责任链模式是什么

    php设计模式课程---5.责任链模式是什么 一.总结 一句话总结: 自己权限不够,就交给上级处理 1.选择结构怎么做到面向对象开闭原则? 也就是说if,都可以用接口的实现来实现,这样就避免了更新的时 ...

  6. lucene内置的评分函数

    For multiterm queries, Lucene takes the Boolean model, TF/IDF, and the vector space model and combin ...

  7. Zabbix数据库清理历史数据

    Zabbix清理历史数据 Zabbix是个很好的监控软件,随着公司监控项目越来越多,数据越来越多,zabbix负载重,可能造成系统性能下降. Zabbix里面最大的表就是历史记录表,history,h ...

  8. hdu1520树形dp入门

    题目链接 题意:要开派对,邀请了上司就不能邀请他的下属,邀请了下属就不能邀请他的上司,每个人有一个值,求邀请的人的总值最大 第一行给出一个数n,代表有n个人. 下面n行分别给出n个人的的值 再下面n行 ...

  9. Codefoeces 734F. Anton and School 数学

    Codefoeces 734F 题目大意: 给定两个正整数序列\(b,c\)构造一个正整数序列\(a\)使其满足 \[ \left\{ \begin{array}{} b_i=(a_i\text{ a ...

  10. 发个IOCP的C++例子

    IOCP的c++例子 IOCP这个东西连续关注了将近3年的时间,这个代码从哪里找到的已经忘了,下面是作者的信息.感谢他提供的代码! /*++ Copyright (c) 2004 模块名: iomod ...