题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可。注意:输入可能是空串。

思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min(D[i][k] + D[k+1][j], D[i][j]).

    输入时,可能是空串应该用gets、fgets、getline,应注意换行符的吸收。每组数据前有一个换行符,输出的两组数据之间有换行。

AC代码:

#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#include<utility>
#include<string>
#include<iostream>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define  PI pair<int, int>
const int maxn = 100 + 5;
char s[maxn];
int d[maxn][maxn];

bool match(char a, char b) {
	if(a == '(' && b == ')' || a == '[' && b == ']') return true;
	return false;
}

void print(int i, int j) {
	if(i > j) return;
	if(i == j) {
		if(s[i] == '(' || s[i] == ')') printf("()");
		else printf("[]");
	}
	int ans = d[i][j];
	if(match(s[i], s[j]) && d[i+1][j-1] == ans) {
		printf("%c", s[i]);
		print(i+1, j-1);
		printf("%c", s[j]);
		return;
	}
	for(int k = i; k < j; ++k) {
		if(d[i][k] + d[k+1][j] == ans) {
			print(i, k);
			print(k+1, j);
			return;
		}
	}
}

void solve(int n) {
	//初始化边界
	for(int i = 0; i < n; ++i) {
		d[i + 1][i] = 0;
		d[i][i] = 1;
	}
	for(int i = n - 2; i >= 0; --i)
		for(int j = i + 1; j < n; ++j) {
			d[i][j] = n;  //最多需要匹配N个括号
			if(match(s[i], s[j])) d[i][j] = min(d[i][j], d[i+1][j-1]);
			for(int k = i; k < j; ++k) {
				d[i][j] = min(d[i][k] + d[k+1][j], d[i][j]);
			}
	}
	print(0, n - 1);
}

int main() {
	int T;
	scanf("%d", &T);
	getchar();
	int kase = 0;
	while(T--){
		if(kase++) {
			printf("\n");
		}
		getchar();
		fgets(s, sizeof(s), stdin);
		int n = strlen(s);
		if(n == 1) {
			printf("\n");
			continue; //空串
		}
		solve(n - 1);
		printf("\n");
	}
	return 0;
}

如有不当之处欢迎指出!

UVA 1626 Brackets sequence 区间DP的更多相关文章

  1. POJ 1141 Brackets Sequence(区间DP, DP打印路径)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  2. poj 1141 Brackets Sequence 区间dp,分块记录

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35049   Accepted: 101 ...

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

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

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

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

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

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

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

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

  7. poj 1141 Brackets Sequence (区间dp)

    题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...

  8. Ural 1183 Brackets Sequence(区间DP+记忆化搜索)

    题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...

  9. poj 1141 Brackets Sequence ( 区间dp+输出方案 )

    http://blog.csdn.net/cc_again/article/details/10169643 http://blog.csdn.net/lijiecsu/article/details ...

随机推荐

  1. MySQL两大存储引擎InnoDB与MyISAM

    1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...

  2. linux根据端口号查询来源程序

    1.根据端口号查询进程  netstat -tunlp|grep port 2.根据进程查询来源程序 ps aux | grep pid 上图看出所属进程为2281 上图看出占用8083端口的程序为n ...

  3. ueditor表格边框没有颜色的解决

    问题: 用ueditor画表格,会发现表格存在,但是表格边框没有颜色. 解决方法: 需要对js文件中的样式进行修改,这里我引用的编辑器样式文件是ueditor.all.min.js,所以先找到该文件, ...

  4. java从文件中读取json

    wangxiaoer.json里面存放了json数据 需要依赖common-io.jar

  5. PHP如何读取json数据

    1的 <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e": ...

  6. 4.Handler之CoreHandler编写

    4.Handler之CoreHandler编写 如图右上角所示,Ray中有两类Handler(SubHandler和PartSubHandler),在使用中,SubHandler派生Actor的Cor ...

  7. 监控 Linux 性能的 18 个命令行工具[转]

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...

  8. MySQL--pt-osc工具学习

    ##=====================================================##pt-osc之工作流程:1.检查更改表是否有主键或唯一索引,是否有触发器2.检查修改表 ...

  9. Git多帐号配置,管理多个SSH

    查看自己所有的SSH-Key $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 如果你已经创建过git账号那你可能和我一样会看到只有一个SSH-Key, 这 ...

  10. ABP官方文档翻译 9.1 EntityFramework集成

    EntityFramework集成 Nuget包 DbContext 仓储 默认仓储 自定义仓储 应用特定的基础仓储类 自定义仓储示例 仓储最佳实践 事务管理 数据存储 ABP可以使用ORM框架,它内 ...