uva1626 Brackets sequence
题目大意:
给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的。不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的。输出最短合法序列。
/*
比较坑的一道题,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的更多相关文章
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
题目描写叙述: 定义合法的括号序列例如以下: 1 空序列是一个合法的序列 2 假设S是合法的序列.则(S)和[S]也是合法的序列 3 假设A和B是合法的序列.则AB也是合法的序列 比如:以下的都是合法 ...
- UVA-1626 Brackets sequence (简单区间DP)
题目大意:给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的.不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的.输出最短合法序列. 题目分析:这是<入门经 ...
- POJ 题目1141 Brackets Sequence(区间DP记录路径)
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27793 Accepted: 788 ...
- POJ 1141 Brackets Sequence
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29502 Accepted: 840 ...
- POJ1141 Brackets Sequence
Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a r ...
- 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...
- ZOJ1463:Brackets Sequence(间隙DP)
Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...
- poj 1141 Brackets Sequence 区间dp,分块记录
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35049 Accepted: 101 ...
- [poj P1141] Brackets Sequence
[poj P1141] Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Special Judge Description ...
随机推荐
- Java for LeetCode 112 Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- redis的持久化RDB与AOF
redis 持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB ...
- 移动端 (H5) 调试工具 -- vconsole
最近在改一个移动端项目,在手机上调试贼头疼,什么日志都看不到,分析不了bug问题. 然后我同事给我介绍了一个移动端的调试神器 -- vconsole 有了这个神器,领导再也不用担心我的工作啦!!! 0 ...
- 20145239杜文超 《Java程序设计》第8周学习总结
20145239 <Java程序设计>第8周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logg ...
- IIS 7.5 虚拟主机独立用户的配置.
1:新建用户 2:打开 IIS->功能视图->打开编辑身份验证->匿名身份验证,点右边编辑->匿名用户标识中选"特定用户"->确定. 3:编缉网站的权 ...
- 排序List集合
这两天写代码过程中遇到一个需求,需要按照某个字段排序List集合,自己实现了一半,发现网上有个更好的版本,就采用了这个,记录下来. 使用这个工具类要注意一个就是 如果你按照age 字段排序,那么age ...
- html5+css3酷炫音频播放器代码
1. [代码][JavaScript]代码 (function($){ jQuery.fn.extend({ "initAudio" : fun ...
- RQNOJ 429 词链:单调栈
题目链接:https://www.rqnoj.cn/problem/429 题意: 如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链. 如:i ...
- 【Lintcode】153.Combination Sum II
题目: Given a collection of candidate numbers (C) and a target number (T), find all unique combination ...
- bzoj 4310 跳蚤 —— 后缀数组+二分答案+贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4310 二分答案——在本质不同的子串中二分答案! 如果二分到的子串位置是 st,考虑何时必须分 ...