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 ...
随机推荐
- [IR课程笔记]Query Refinement and Relevance Feedback
相关反馈的两种类型: “真实”的相关反馈: 1. 系统返回结果 2. 用户提供一些反馈 3. 系统根据这些反馈,返回一些不同的,更好的结果 “假定”的相关反馈 1. 系统得到结果但是并不返回结果 2. ...
- ZOJ - 3861 Valid Pattern Lock 【全排列】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861 思路 先生成全排列,然后判断哪些情况不符合的,剔除就好了 ...
- 使用vscode写typescript(node.js环境)起手式
动机 一直想把typescript在服务端开发中用起来,主要原因有: javascript很灵活,但记忆力不好的话,的确会让你头疼,看着一月前自己写的代码,一脸茫然. 类型检查有利有敝,但在团队开发中 ...
- html5手机网站需要加的那些meta标签,手机网站自适应
的html5相关meta和标签 a.<!-- 强制让文档与设备的宽度保持1:1 --> <meta name="viewport" content=& ...
- JAVA-关键字&标识符
关键字: 关键字就是在java程序中具备特殊含义的标识符.关键字一般用于描述一个程序的结构或者表示数据类型.他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. ...
- 存储过程之rowtype 使用
CREATE OR REPLACE PROCEDURE "DYLYLQX_SC_BA_1" (YWID IN VARCHAR2, FLAG OUT VARCHAR2) IS V_R ...
- [原创]java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
- linux 进程学习笔记-信号semaphore
信号灯(信号量)不是进程通信手段,其是用于控制和协调在进程间通信过程中的共享资源访问,就如同互斥锁(两者的区别可以参考这里) 可以将简单地将信号灯想象成一个计数器,初始时计数器值为n(有n个资源可供使 ...
- OpenCV——PS滤镜 漩涡 vertex
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- 【LeetCode】047. Permutations II
题目: Given a collection of numbers that might contain duplicates, return all possible unique permutat ...