P1241 括号序列

题目描述

定义如下规则序列(字符串):

1.空序列是规则序列;

2.如果S是规则序列,那么(S)和[S]也是规则序列;

3.如果A和B都是规则序列,那么AB也是规则序列。

例如,下面的字符串都是规则序列:

(),[],(()),([]),()[],()[()]

而以下几个则不是:

(,[,],)(,()),([()

现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是找出一个最短规则序列,使得给你的那个序列是你给出的规则序列的子列。(对于序列a1,a2,…,an和序列bl,b2,…,bm,如果存在一组下标1≤i1<i2<…<in≤m,使得aj=b(i,j)对一切1≤j≤n成立,那么a1,a2…,an就叫做b1,b2,…,bm的子列。

输入输出格式

输入格式:

输入文件仅一行,全部由‘(’,‘)’,‘]’,‘]’组成,没有其他字符,长度不超过100。

输出格式:

输出文件也仅有一行,全部由‘(’,‘)’,‘]’,‘]’组成,没有其他字符,把你找到的规则序列输出即可。因为规则序列可能不止一个,因此要求输出的规则序列中嵌套的层数尽可能地少。

输入输出样例

输入样例#1:

([()
输出样例#1:

()[]()

说明

输出解释:

{最多的嵌套层数为1,如层数为2时的一种为()[()]}

jsoi2011

/*69分 维护栈*/
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=;
const int INF=0x7fffffff;
int f[MAXN][MAXN],a[MAXN][MAXN];
char s[MAXN];
int n;
void aaaa(int x,int y)
{
if (x>y)
return;
if (x==y)
{
if (s[x]=='('||s[x]==')')
printf("()");
else
printf("[]");
}
else
{
if (a[x][y]==-)
{
if(s[x]=='(')
{
printf("(");
aaaa(x+,y-);
printf(")");
}
else
{
printf("[");
aaaa(x+,y-);
printf("]");
}
}
else
{
aaaa(x,a[x][y]);
aaaa(a[x][y]+,y);
}
}
}
int main()
{
// gets(s);
scanf("%s",&s);
n=strlen(s);
memset(f,,sizeof(f));
for (int i=n;i>;i--)
{
s[i]=s[i-];
f[i][i]=;
}
int tot;
for (int p=;p<=n;p++)
{
for (int i=;i<=n-p;i++)
{
int j=i+p;
f[i][j]=INF;
if ((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
{
tot=f[i+][j-];
if (f[i][j]>tot)
f[i][j]=tot;
}
a[i][j]=-;
for (int k=i;k<j;k++)
{
tot=f[i][k]+f[k+][j];
if (f[i][j]>tot)
{
f[i][j]=tot;
a[i][j]=k;
}
}
}
}
aaaa(,n);
return ;
}

洛谷 P1241 括号序列的更多相关文章

  1. 洛谷 P1241 括号序列(栈)

    嗯... 题目链接:https://www.luogu.org/problem/P1241 首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整... 一开始是 ...

  2. 洛谷 P1628 合并序列

    洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...

  3. P1241 括号序列

    P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如 ...

  4. 洛谷 P5470 - [NOI2019] 序列(反悔贪心)

    洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...

  5. Luogu p1241 括号序列

    括号序列题目连接 这是一道与dp毫无半点关系的题 本来是去找的题来着,结果并没有找到,然后看到了这道题. (本来以为会是很好写的一道题结果因为题意不清直接原地去世了) 思路很简单,基本没有技术含量. ...

  6. BZOJ 1500 洛谷2042维护序列题解

    BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ...

  7. 洛谷 P5658 括号树 题解

    原题链接 简要题意: 求出以从每个节点到根形成的括号序列的合法对数. 算法一 观察到 \(n \leq 8\) ,所以我们可以用 纯粹的暴力 . 用 \(O(n)\) 时间得出当前节点到根的字符串. ...

  8. 洛谷 P4272 - [CTSC2009]序列变换(堆)

    洛谷题面传送门 u1s1 在我完成这篇题解之前,全网总共两篇题解,一篇使用的平衡树,一篇使用的就是这篇题解讲解的这个做法,但特判掉了一个点,把特判去掉在 BZOJ 上会 WA 一个点. 两篇题解都异常 ...

  9. 【洛谷P1483】序列变换

    题目大意:给定一个长度为 N 的序列,有 M 个操作,支持将下标为 x 的倍数的数都加上 y,查询下标为 i 的元素的值. 题解:由于查询操作很少,相对的,修改操作很多.若直接模拟修改操作,即:枚举倍 ...

随机推荐

  1. uva 12626 - I ❤ Pizza

    #include <iostream> #include <cstdio> #include <string> #include <algorithm> ...

  2. MATLAB cell 数组介绍

    转载:http://www.matlabsky.com/forum.php?mod=viewthread&tid=21089 由于工作需要,经常要处理大量的实验数据.基本都是由仪器导出来,随着 ...

  3. Android Studio Gradle Running报错:Failed to complete Gradle execution.

    错误信息如下图所示: 重启AndroidStudio问题解决.

  4. SharedPreference简介

    SharedPreference 是一种简单的.轻量级的名称/值对(NVP)机制,用于保存原始应用程序数据. 使用SharedPreferences类可以创建名称/值对的命名映射,他们可以在会话之间持 ...

  5. cf B. Flag Day

    http://codeforces.com/contest/357/problem/B #include <cstdio> #include <cstring> #includ ...

  6. 从vector容器中查找一个子串:search()算法

    如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...

  7. tag_on_failure => [] # prevent default _grokparsefailure tag on real records

    [elk@zjtest7-frontend config]$ cat stdin04.conf input { stdin { } } filter { # drop sleep events gro ...

  8. 如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents source destination

    如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents  source  destination

  9. Linux企业级项目实践之网络爬虫(21)——扩展为多任务爬虫

    高效的网络爬虫是搜索引擎的重要基础.采用多任务并发执行,实现类似于CPU的流水线(pipeline)运行方式,可极大地提高网络和计算资源的利用率等性能. #include "threads. ...

  10. phpcms:八、show.html

    标题:{$title}来源:{$copyfrom}评论:<a href="#comment_iframe" id="comment">0</a ...