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 ...
随机推荐
- (转)Ubuntu10.04编译FFmpeg
刚开始安装折腾了好久,很多软件包都找不到,可能是跟软件源有关,所以先说一下我的软件源: 软件源是用的中国默认的官方源http://cn.archive.ubuntu.com/ubuntu/ 一.安装编 ...
- Google IO 2019 Android 太长不看版
Google I/O 2019, 这里有个playlist是所有Android开发相关的session视频合集: Android & Play at Google I/O 2019 当然啦每个 ...
- Spark- Spark Yarn模式下跑yarn-client无法初始化SparkConext,Over usage of virtual memory
在spark yarn模式下跑yarn-client时出现无法初始化SparkContext错误. // :: INFO mapreduce.Job: Task Id : attempt_142829 ...
- 有时候,Visual C++代码中加中文注释会导致错误!
今天做题发现了个奇葩错误,以此警戒自己. 张某,做的一道题. --------------------------------------------------------------------- ...
- Mysql处理字符串函数(转)
http://www.jb51.net/article/27458.htm 感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函 ...
- 机器视觉 之 Gabor Feature
在机器视觉中,gabor feature是一种比较常见的特征,因为其可以很好地模拟人类的视觉冲击响应而被广泛应用于图像处理, gabor feature 一般是通过对图像与gabor filter做卷 ...
- PS 滤镜— — sparkle 效果
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- loading bar
上面的loading条,想到的办法是用两个半圆覆盖实现,结果也就这么做了,可是明明一个圆就可以的,哎智商堪忧... <!DOCTYPE html> <html lang=" ...
- Redis 客户端安装与远程连接图解
Linux环境:Centos 6.8 Redis服务端版本:3.2.6 Redis客户端下载链接:https://redisdesktop.com/download 省略Linux系统安装Redis教 ...
- Thrift之TProcess类体系原理及源码详细解析
我的新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 之前对Thrift自动生成代码的实现细节做了详细的分析,下面进行处理层的实现做详细 ...