UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
题目描写叙述:
定义合法的括号序列例如以下:
1 空序列是一个合法的序列
2 假设S是合法的序列。则(S)和[S]也是合法的序列
3 假设A和B是合法的序列。则AB也是合法的序列
比如:以下的都是合法的括号序列
(), [], (()), ([]), ()[], ()[()]
以下的都是非法的括号序列
(, [, ), )(, ([)], ([(]
给定一个由'(', ')', '[', 和 ']' 组成的序列,找出以该序列为子序列的最短合法序列。
思路:真是经典的题目。区间DP。题目竟然有陷阱,输入可能是空串,所以用scanf的时候,会不读入,就少了一次读入,wa
所以用gets
// Accepted C++ 1.002 2015-03-12 13:34:47
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int inf= 0x3f3f3f3f;
int dp[105][105];
char str[105];
int n; bool match(char a,char b)
{
if(a=='('&&b==')') return true;
else if(a=='[' && b==']') return true;
return false;
}
void print(int l,int r) //递归打印解
{
if(l>r) return ;
if(l==r)
{
if(str[l]=='('||str[l]==')') printf("()");
else if(str[l]=='['||str[l]==']') printf("[]");
return ;
}
if(match(str[l],str[r])&&dp[l][r]==dp[l+1][r-1])
//别忘了match(str[l],str[r]),由于dp[l][r]==dp[l+1][r-1]时候,不一定外側括号匹配,非常easy错
{
putchar(str[l]);
print(l+1,r-1);
putchar(str[r]);
return ;
}
for(int k=l;k<r;k++)
if(dp[l][r]==dp[l][k]+dp[k+1][r])
{
print(l,k);
print(k+1,r);
return;
}
}
int main()
{
int T;
scanf("%d",&T);
getchar();//吃掉T之后的换行
while(T--)
{
getchar(); //每一个输入前都有一个空行
gets(str+1);
n=strlen(str+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++) dp[i][i]=1; //边界
for(int l=1;l<n;l++)
for(int p=1;p+l<=n;p++)
{
dp[p][p+l] = inf ;
if(match(str[p],str[p+l])) dp[p][p+l]=dp[p+1][p+l-1];
for(int k=p ; k<p+l ;k++)
dp[p][p+l]=min(dp[p][p+l],dp[p][k]+dp[k+1][p+l]);
}
if(n) print(1,n);
puts("");
if(T) putchar('\n'); //输出之间要输出空行
}
return 0;
}
UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)的更多相关文章
- 区间dp 括号匹配问题
这道题目能用区间dp来解决,是因为一个大区间的括号匹配数是可以由小区间最优化选取得到(也就是满足最优子结构) 然后构造dp 既然是区间类型的dp 一般用二维 我们定义dp[i][j] 表示i~j这个区 ...
- poj 2955 Brackets (区间dp 括号匹配)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- 区间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 ...
- [原]POJ1141 Brackets Sequence (dp动态规划,递归)
本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...
- POJ 1141 Brackets Sequence(区间DP, DP打印路径)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- UVA 1626 Brackets sequence 区间DP
题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可.注意:输入可能是空串. 思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min( ...
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...
- poj 1141 Brackets Sequence (区间dp)
题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...
随机推荐
- python之if循环
if 条件: if语句块else: 语句块 money = int(input("请输入你兜里的钱:")) if money > 500: print("吃肉&qu ...
- docker-使用Dockerfile制作镜像
最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用.我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装 ...
- MySQL InnoDB表和索引之聚簇索引与第二索引
MySQL InnoDB表和索引之聚簇索引与第二索引 By:授客QQ:1033553122 每个InnoDB表都有一个称之为聚簇索引(clustered index)的特殊索引,存储记录行数据.通常, ...
- (小技巧)Sql server查看sql语句的执行时间(转)
转自CSDN: 在写数据库sql的时候,我们往往很关心该sql语句的执行效率,如下小技巧可以帮助程序员简单快速的得到某条或某几条sql的执行时间. declare @d datetime set @d ...
- [20180614]删除bootstrap$记录无法启动2.txt
[20180614]删除bootstrap$记录无法启动2.txt --//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstr ...
- VS发布web应用程序报:无法识别的特性“xmlns:xdt”。请注意特性名称区分大小写 或 未能将文件obj\...复制到obj\...未能找到路径
问题1:无法识别的特性“xmlns:xdt”.请注意特性名称区分大小写 问题2:未能将文件obj\...复制到obj\...未能找到路径 解决办法:将web项目文件下的obj文件夹从项目中排除,然后再 ...
- Mongo学习---mongo入门1
Docker安装以及设置mongo用户 docker pull mongo (拉取镜像 默认最新版本) docker images (查看镜像) docker run -p 27017:27017 - ...
- flask框架的教程--虚拟环境的安装[一]
为什么需要安装虚拟环境呢? 因为虚拟环境中扩展包对本机软件中不影响 安装 查看是否安装了虚拟环境 安装虚拟环境的第三方工具 sudo pip install virtualenv sudo pip i ...
- Linux自制编译内核
今天我们来自己学习编译内核并使用它.自制内核是个人定制版,定制自己专属的内核环境. 我们先看看编译步骤有哪些: 步骤: 1.# tar xf linux-3.10.37.tar.xz -C /usr/ ...
- Unity3d自制字体
这篇教学中会使用到BMFont 这个工具 准备好Unity5.3.2版本,其他版本会有异常 一.制作字体 下载链接: http://www.angelcode.com/products/bmfont/ ...