题目链接:https://uva.onlinejudge.org/external/16/1626.pdf

题意: 给定一个字符串,看是否括号匹配,不匹配加括号,加最少的括号使得匹配。输出该结果。

分析: 解题思路和切木棍很类似。d(i,j) i ~ j 要加最少多少括号,他一定等于: 分两种情况,一:[s'],(s'),d(i,j) = d(i+1,j-1);二: d(i,j) = min(d(i,k),d(k+1,j));

注意: 输入有空行。

#include <bits/stdc++.h>
using namespace std; const int maxn = +;
char S[maxn];
int n,d[maxn][maxn]; bool match(char a,char b)
{
return (a=='('&&b==')')||(a=='['&&b==']');
} void readline(char *S)
{
fgets(S,maxn,stdin);
} int dp(int i,int j)
{
if(i>j) return ;
if(i==j) return ;
int& ans = d[i][j];
if(ans>=) return ans;
ans = n;
if(match(S[i],S[j]))
ans = min(ans,dp(i+,j-));
for(int k=i; k<j; k++)
{
ans = min(ans,dp(i,k)+dp(k+,j));
}
return ans;
} void print(int i,int j)
{ if(i>j) return ;
if(i==j)
{
if(S[i]=='('||S[i]==')') printf("()");
else printf("[]");
return ;
} int ans = dp(i,j);
if(match(S[i],S[j])&&ans==dp(i+,j-))
{
printf("%c",S[i]);
print(i+,j-);
printf("%c",S[j]);
return;
} for(int k=i; k<j; k++)
{
if(ans==dp(i,k)+dp(k+,j))
{
print(i,k);
print(k+,j);
return ;
}
}
} int main()
{
int T; readline(S);
sscanf(S, "%d", &T);
readline(S); while(T--)
{
readline(S);
n = strlen(S) - ;
memset(d, -, sizeof(d));
print(, n-);
printf("\n");
if(T) printf("\n");
readline(S);
}
return ;
}

Uva 1626,括号序列的更多相关文章

  1. UVa 1626 括号序列(矩阵连乘)

    https://vjudge.net/problem/UVA-1626 题意: 输入一个由 "(" . ")" . "[" . " ...

  2. 括号序列问题 uva 1626 poj 1141【区间dp】

    首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...

  3. UVa 1626 - Brackets sequence(区间DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. BZOJ4350: 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

  5. DP专题——括号序列

    毕竟是个渣,写完一遍之后又按LRJ的写了一遍,再写了一遍递归版,最终加上输出解部分 括号序列 定义如下规则序列(字符串): 空序列是规则序列: 如果S是规则序列,那么(S)和[S]也是规则序列: 如果 ...

  6. 【BZOJ】2209: [Jsoi2011]括号序列(splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2209 splay又犯逗........upd1那里的sum忘记赋值反............. 本题 ...

  7. UVa 1626 (输出方案) Brackets sequence

    正规括号序列定义为: 空序列是正规括号序列 如果S是正规括号序列,那么[S]和(S)也是正规括号序列 如果A和B都是正规括号序列,则AB也是正规括号序列 输入一个括号序列,添加尽量少的括号使之成为正规 ...

  8. 51nod1476 括号序列的最小代价

    这题应该可以用费用流写吧?不过我想不出贪心来TAT.其实还是单调队列乱搞啊T_T //ÍøÉϵÄ̰ÐÄËã·¨ºÃÉñ°¡¡£¡£¡£ÎÒÖ»»áÓÃ×îС·ÑÓÃ×î´óÁ÷ÅÜTAT #in ...

  9. lintcode: 有效的括号序列

    题目: 有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and']', 判定是否是有效的括号序列. 样例 括号必须依照 "() ...

  10. uoj #31. 【UR #2】猪猪侠再战括号序列 贪心

    #31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...

随机推荐

  1. Linux C进程内存布局

    当程序文件运行为进程时,进程在内存中获得空间.这个空间是进程自己的内存空间.每个进程空间按照如下方式分为不同区域: 进程内存空间布局图 text:代码段.存放的是程序的全部代码(指令),来源于二进制可 ...

  2. Ruby On Rails 在线学习好网站

    最好学习Ruby网站: https://ruby-china.org/    我的用户名:19920625lsg,  密码为最常用的 Ruby on Rails 教程 http://railstuto ...

  3. Java基础(7):二维数组初始化时需要注意的问题

    二维数组可以先指定行,再指定列:但不能先指定列,再指定行 没有说明二维数组的行的个数,在定义二维数组时也可以只指定行的个数,然后再为每一行分别指定列的个数.如果每行的列数不同,则创建的是不规则的二维数 ...

  4. 控件ListView

    ListView的简单用法,先在布局文件中添加ListView控件: 接下来修改MainActivity中的代码: 由上面的代码可以知道,数据是无法直接传递给ListView的,需要借助适配器来完成. ...

  5. 构造器Constructor是否可被override?

    构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading.

  6. DataFrame使用mysql数据

    错误提示:  Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc ...

  7. rails控制台进入

    数据库控制台: rails db .help查看可使用的命令 rails控制台 rails c 普通ruby控制台: irb

  8. android模拟器启动没有拨号功能

    网上查询了很多资料, 其中一位网友给出的结论是android 4.3模拟器的bug, 如果在通讯录中添加好友,也是可以进行拨号的. 总结: 自认为是SDK安装程序不完整或设置AVD模拟器的时候设置项出 ...

  9. 在linux中搭建git服务器

    个人觉得, 以下搭建git服务器的过程就像是在linux增加了一个用户, 而这个用户的登录shell是 git-shell, 太刨根问底的东西我也说不清楚, 还是看下面的过程吧. 过程参考了网上的文章 ...

  10. 怎么开启PHP 的错误提示?

    怎么开启PHP 的错误提示?   在php.ini 修改error_reporting = E_ALL & ~E_NOTICEdisplay_errors = On重启apache服务器在运行 ...