UVA 1626 Brackets sequence 区间DP
题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可。注意:输入可能是空串。
思路: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的更多相关文章
- POJ 1141 Brackets Sequence(区间DP, DP打印路径)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- poj 1141 Brackets Sequence 区间dp,分块记录
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35049 Accepted: 101 ...
- UVa 1626 - Brackets sequence(区间DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA - 1626 Brackets sequence (区间dp)
题意:给定一个串,可能空串,或由'[',']','(',')'组成.问使其平衡所需添加最少的字符数,并打印平衡后的串. 分析:dp[i][j]表示区间(i,j)最少需添加的字符数. 1.递推. #in ...
- UVA 1626 Brackets sequence(括号匹配 + 区间DP)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/E 题意:添加最少的括号,让每个括号都能匹配并输出 分析:dp ...
- UVa 1626 Brackets sequence (动态规划)
题意:用最少的括号将给定的字符串匹配,输出最优解.可能有空行. 思路:dp. dp[i][j]表示将区间i,j之间的字符串匹配需要的最少括号数,那么 如果区间左边是(或[,表示可以和右边的字符串匹配, ...
- poj 1141 Brackets Sequence (区间dp)
题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...
- poj 1141 Brackets Sequence ( 区间dp+输出方案 )
http://blog.csdn.net/cc_again/article/details/10169643 http://blog.csdn.net/lijiecsu/article/details ...
随机推荐
- 【转】wget
wget 下载整个网站,或者特定目录 需要下载某个目录下面的所有文件.命令如下 wget -c -r -np -k -L -p www.xxx.org/pub/path/ 在下载时.有用到外部域名的图 ...
- JavaSE基础篇—流程控制语句—方法的定义 调用和重载
1.定义方法 是封装在一起来执行操作语句的集合,用来完成某个功能操作,简单的说就是提取出来的有特定功能的代码(程序).在某些语言中被称为函数或者过程,比较特殊的方法是main方法(主方法),main方 ...
- linux下安装pip
1.pip下载安装 wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d ...
- Vue.js根据列表某列值更新filter
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- java中的二叉树排序问题
原创:转载请注明出处 目的:想用java实现二叉树排序算法 思想:利用java中面向对象的思想,即: Tree:类 树根Tree:root //static所属于每一个Tree 左节点Tree:lef ...
- java重定向
package com.sn.servlet; import java.io.IOException; import javax.servlet.ServletException; import ja ...
- Apache中的gzip压缩作用及配置
gzip会对文本资源进行压缩,一般能节省40%的大小,二进制内容不需要开启Gzip压缩,因为这些文件是已经压缩过的,如果再进行gzip压缩可能反而会增加其大小,并且空耗cpu资源啊. 静态资源一般都会 ...
- SpringBoot与Mybatis整合方式01(源码分析)
前言:入职新公司,SpringBoot和Mybatis都被封装了一次,光用而不知道原理实在受不了,于是开始恶补源码,由于刚开始比较浅,存属娱乐,大神勿喷. 就如网上的流传的SpringBoot与Myb ...
- 使用mongoose和bcrypt实现用户密码加密
前面的话 最近在做的个人项目中,需要对密码进行加密保存,对该操作的详细步骤记录如下 介绍 关于mongoose已经写过博客就不再赘述,下面主要介绍bcrypt bcrypt是一个由两个外国人根据Blo ...
- web开发过程中关于路径问题的总结
约束: 相对路径概念-./代表当前目录.../代表上级目录 示例的所有文件都基于http://127.0.0.1:8080/test路径开放,test为对应的contextPath 前端 HTML标签 ...