UVa 1626 括号序列(矩阵连乘)
https://vjudge.net/problem/UVA-1626
题意:
输入一个由 "(" 、 ")" 、 "[" 、 "]" 构成的序列,添加尽量少的括号,得到一个规则序列。
思路:
d[i][j]表示 i~j 需要添加的最少个数,具体看代码吧,我也只是看着刘汝佳的代码写的 。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std; char s[];
int n;
int d[][]; bool cmp(char a, char b)
{
return a == '('&& b == ')' || (a == '['&& b == ']');
} void dp()
{ for (int i = ; i < n; i++)
{
d[i + ][i] = ; //初始化,对应于下面的d[i+1][j-1]
//也就是如果为()或[],此时不需要添加括号
d[i][i] = ; //这个对应于单个'('、')'、'['、']'的情况
} //从短区间开始枚举
for (int i = n - ; i >= ; i--)
{
for (int j = i + ; j < n; j++)
{
d[i][j] = n;
//如果为()or[],则这最外面的不用管
if (cmp(s[i], s[j])) d[i][j] = min(d[i][j], d[i + ][j - ]);
for (int k = i; k < j; k++)
d[i][j] = min(d[i][j], d[i][k] + d[k + ][j]);
}
}
} void print(int i, int j)
{
if (i>j) return;
if (i == j)
{
if (s[i] == '(' || s[i] == ')') cout << "()";
else cout << "[]";
return;
}
int ans = d[i][j];
//如果和里面所要加的括号数一样,那么 i 和 j 是不需要加括号的
if (cmp(s[i], s[j]) && ans == d[i + ][j - ])
{
cout << s[i];
print(i + , j - );
cout << s[j];
return;
} for (int k = i; k < j; k++)
{
if (ans == d[i][k] + d[k + ][j])
{
print(i, k);
print(k + , j);
return;
}
}
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int T;
cin >> T;
getchar();
while (T--)
{
gets(s);
gets(s);
n = strlen(s);
dp();
print(, n - );
cout << endl;
if (T) cout << endl;
}
return ;
}
UVa 1626 括号序列(矩阵连乘)的更多相关文章
- 括号序列问题 uva 1626 poj 1141【区间dp】
首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...
- BZOJ4350: 括号序列再战猪猪侠
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...
- BZOJ4350: 括号序列再战猪猪侠【区间DP】
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列, ...
- UVa 1626 - Brackets sequence(区间DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- DP专题——括号序列
毕竟是个渣,写完一遍之后又按LRJ的写了一遍,再写了一遍递归版,最终加上输出解部分 括号序列 定义如下规则序列(字符串): 空序列是规则序列: 如果S是规则序列,那么(S)和[S]也是规则序列: 如果 ...
- 【BZOJ】2209: [Jsoi2011]括号序列(splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=2209 splay又犯逗........upd1那里的sum忘记赋值反............. 本题 ...
- UVa 1626 (输出方案) Brackets sequence
正规括号序列定义为: 空序列是正规括号序列 如果S是正规括号序列,那么[S]和(S)也是正规括号序列 如果A和B都是正规括号序列,则AB也是正规括号序列 输入一个括号序列,添加尽量少的括号使之成为正规 ...
- 51nod1476 括号序列的最小代价
这题应该可以用费用流写吧?不过我想不出贪心来TAT.其实还是单调队列乱搞啊T_T //ÍøÉϵÄ̰ÐÄËã·¨ºÃÉñ°¡¡£¡£¡£ÎÒÖ»»áÓÃ×îС·ÑÓÃ×î´óÁ÷ÅÜTAT #in ...
- lintcode: 有效的括号序列
题目: 有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and']', 判定是否是有效的括号序列. 样例 括号必须依照 "() ...
随机推荐
- 004-spring cloud gateway-网关请求处理过程
一.网关请求处理过程 客户端向Spring Cloud Gateway发出请求.如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序.此处理程序运行通过特定于请求的过滤器链发送请求. ...
- js-jquery-SweetAlert【一】使用
一.下载安装 地址:http://t4t5.github.io/sweetalert/ 二.页面引用 <script src="dist/sweetalert.min.js" ...
- ASP.NET一个页面的生命周期
在学习ASP.NET页面生命周期前,需要先了解之前的ASP.NET的基本运行机制,在理解ASP.NET基本运行机制原理后,下面将介绍ASP.NET的生命周期中,页面从创建到处理结束的过程中ASP.NE ...
- MVC html.beginform & ajax.beginform
1.指定表单提交方式和路径等 @using (Html.BeginForm("Index", "Home", FormMethod.Get, new { nam ...
- 提示'HTTP消息不可读'
1.提示下面的错误信息 2.修改后的代码,费用接口 import unittest import requests import json import HTMLTestRunner ur1 = 'h ...
- [LeetCode] 168. Excel Sheet Column Title_Easy tag: Math
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- (C#) SQLite数据库连接字符串
最常用的:Data Source=filename;Version=3; 自增主键: Create test1( [id] integer PRIMARY KEY AUTOINCREMENT ,[n ...
- [转]Tesseract-OCR (Tesseract的OCR引擎最先由HP实验室于1985年开始研发)
光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程.OCR技术非常专业,一般多是印刷.打印行 ...
- 算法---数组总结篇2——找丢失的数,找最大最小,前k大,第k小的数
一.如何找出数组中丢失的数 题目描述:给定一个由n-1个整数组成的未排序的数组序列,其原始都是1到n中的不同的整数,请写出一个寻找数组序列中缺失整数的线性时间算法 方法1:累加求和 时间复杂度是O(N ...
- Windows程序自启动方法汇总
文件夹 一.当前用户专有的启动文件夹 二.对所有用户有效的启动文件夹 三.Load注册键 四.Userinit注册键 五.Explorer\Run注册键 六.RunServicesOnce注册键 七. ...