题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=452

用dp[i][j] 记录一段序列,starts from index i, ends with index j,需要添加的char的个数。对于一段序列i~j,如果i, j 配对的话,那么dp[i][j]=dp[i+1][j-1].如果i, j不配对的话,那就需要对序列进行分割,dp[i][j]=dp[i][k]+dp[k+1][j],对k进行for loop找到最佳的k。但是当i, j配对时,并不代表dp[i+1][j-1]是最佳的结果,仍旧需要寻找最佳的k。代码如下:

 #include <iostream>
#include <math.h>
#include <stdio.h>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <string>
#include <sstream>
#include <cstring>
#include <queue>
#include <vector>
#include <functional>
#include <cmath>
#include <set>
#define SCF(a) scanf("%d", &a)
#define IN(a) cin>>a
#define FOR(i, a, b) for(int i=a;i<b;i++)
#define Infinity 9999999
typedef long long Int;
using namespace std; int path[][];
char brackets[];
void sprint(int s, int e)
{
if (s > e)
return;
if (s == e)
{
if (brackets[s] == '(' || brackets[s] == ')')
printf("()");
else
printf("[]");
}
else
{
if (path[s][e] == -)
{
printf("%c", brackets[s]);
sprint(s + , e - );
printf("%c", brackets[e]);
}
else
{
sprint(s, path[s][e]);
sprint(path[s][e] + , e);
}
}
} int main()
{
int N;
SCF(N);
cin.get();
int len = ;
int dp[][];
FOR(casenum, , N)
{
cin.get();
cin.getline(brackets, );
len = ;
for (len = ; brackets[len] != '\0'; len++); if (casenum)
printf("\n");
if (len == )
{
printf("\n");
continue;
}
FOR(i, , len)
{
FOR(j, , len)
dp[i][j] = ;
}
FOR(i, , len)
dp[i][i] = ;
int end = ; FOR(clen, , len)
{
FOR(start, , len - clen)
{
end = start + clen;
dp[start][end] = Infinity; if ((brackets[start] == '(' && brackets[end] == ')') || (brackets[start] == '[' && brackets[end] == ']'))
{
dp[start][end] = dp[start + ][end - ];
path[start][end] = -;
} for (int k = start; k < end; k++)
{
if (dp[start][end] > dp[start][k] + dp[k + ][end])
{
dp[start][end] = dp[start][k] + dp[k + ][end];
path[start][end] = k;
}
} }
}
sprint(, len - );
printf("\n");
} return ;
}

UVA 2451 Brackets sequence的更多相关文章

  1. UVa 1626 Brackets sequence (动态规划)

    题意:用最少的括号将给定的字符串匹配,输出最优解.可能有空行. 思路:dp. dp[i][j]表示将区间i,j之间的字符串匹配需要的最少括号数,那么 如果区间左边是(或[,表示可以和右边的字符串匹配, ...

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

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

  3. UVA 1626 Brackets sequence(括号匹配 + 区间DP)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/E 题意:添加最少的括号,让每个括号都能匹配并输出 分析:dp ...

  4. UVA 1626 Brackets sequence 区间DP

    题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可.注意:输入可能是空串. 思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min( ...

  5. UVA - 1626 Brackets sequence (区间dp)

    题意:给定一个串,可能空串,或由'[',']','(',')'组成.问使其平衡所需添加最少的字符数,并打印平衡后的串. 分析:dp[i][j]表示区间(i,j)最少需添加的字符数. 1.递推. #in ...

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

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

  7. POJ 1141 Brackets Sequence

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

  8. POJ1141 Brackets Sequence

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

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

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

随机推荐

  1. TCP TIME_WAIT过多的解决方法

    总结: 最合适的解决方案是增加更多的四元组数目,比如,服务器监听端口,或服务器IP,让服务器能容纳足够多的TIME-WAIT状态连接.在我们常见的互联网架构中(NGINX反代跟NGINX,NGINX跟 ...

  2. 洛谷P1443马的遍历

    传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...

  3. jenkins 可以设置最多执行并发执行多少个

    系统-系统配置

  4. 使用jquery+css实现瀑布流布局

    虽然可以直接使用css实现瀑布流布局,但显示的方式有点问题,所以这儿就直接使用jquery+css来实现瀑布流布局,最终效果如下:      思路是通过将每个小块的position设置为relativ ...

  5. Oracle 查询合并列

    在ORACLE  查询时,有时要将多个列合并成一行,其方法如下: 1. decode 函数 decode 函数的语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省 ...

  6. Linux下Memcached安装与启用

    http://www.linuxidc.com/Linux/2016-07/133423.htm

  7. [UGUI]圆形Image

    参考链接: http://www.cnblogs.com/leoin2012/p/6425089.html 前面说过Mask组件会影响性能:https://www.cnblogs.com/lyh916 ...

  8. Mac平台下部署UE4工程到iOS设备的流程

    1.开发环境 UE4.Xcode.iOS版本情况如下: 1.UE4:当前最新版本Unreal Engine 4.17.2. 2.Xcode:当前最新版本Xcode9.0. 3.iOS:当前最新版本iO ...

  9. saltstack的封装和内网使用

    0.客户端使用 linux:把linux的ragent文件夹拷贝到内网linux /opt目录下,运行初始化脚本 salt服务端:# @Master:"/opt/ragent/python/ ...

  10. RANSAC介绍(Matlab版直线拟合+平面拟合)

    https://blog.csdn.net/u010128736/article/details/53422070