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 ...
随机推荐
- 如何将web项目部署到Ubuntu服务器上
情景回顾: 前几天在下本着人道主义原则帮我老师的一个朋友做了个小网页,(啥人道不人道的,主要是给钱了),做完之后本来是想偷懒直接把网页扔给他自己部署去吧,结果让我帮忙部署一下,得,偷懒也偷不成了,搞吧 ...
- Vue和React的对比
今晚我们来搞一搞Vue和React的对比好吧,话不多说今天我们直接开搞可好,各位小老板,开始吧 1. react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入, 所以在react中,是 ...
- 活字格Web应用平台学习笔记 8 - 查询记录
基础教程只剩一点点了,学完算了. 这一课的目标是:查询记录 这个操作的原理很简单,增加一个表格,绑定“部门”那个数据,然后增加一个命令,点击查询. 绑定命令: 完成后的实际界面,查询前面是个下拉框: ...
- Linux 下修改网卡MAC地址
Linux下修改网卡MAC地址 by:授客 QQ:1033553122 例子:修改网卡接口eth0的mac地址 #停用网卡接口,比如eth0 # ifconfig eth0 down #编辑对应的网卡 ...
- 2.网络编程-udp
# 使用套接字发送udp数据import socket s = socket.socket(socket.AF_INET, SOCK_DGRAM) s.sendto(b"hello" ...
- 逻辑回归&线性回归
# coding:utf-8 import numpy as np from sklearn import linear_model, datasets import matplotlib.pyplo ...
- 07-OpenLDAP密码审计
OpenLDAP密码审计 阅读视图 密码审计的作用 操作实践 1. 密码审计的作用 开启密码审计的功能主要用于记录OpenLDAP用户修改密码,以及密码审计. 2. 操作实践 开启密码审计模块并配置密 ...
- fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题
fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...
- Zabbix3.x 监控磁盘IO与自定义模板
引言 Zabbix自带的模板,帮助我们完成了一些比较常用的监控.但如果想要监控磁盘的IO,zabbix并没有给我们提供这么一个模板,所以我们需要自己来创建一个模板来完成磁盘IO的监控. 操作步骤 1. ...
- Linux 小知识翻译 - 「Linux的吉祥物企鹅叫什么名字?」
这次说说Linux的吉祥物 *企鹅* 都知道Linux的吉祥物是企鹅,但是这个企鹅叫什么名字呢? 它的名字就是「Tux」,注意可不是「Tax」(税收). 具体参考 wiki:中文解释 英文的解释更为 ...