首页 > 其他分享 >P1944 最长括号匹配

P1944 最长括号匹配

时间:2024-05-26 11:33:36浏览次数:26  
标签:匹配 ll 括号 anslength include dp P1944

链接:https://www.luogu.com.cn/problem/P1944
题目:

思路:注意题目里说的:
1.(),[]是括号匹配的字符串。

2.若A是括号匹配的串,则(A),[A]是括号匹配的字符串。

3.若A,B是括号匹配的字符串,则AB也是括号匹配的字符串。
所以设dp[i]是以i结尾的最长匹配字符串的长度,那么更新状态方程可以写为:
如果s[i] == ']' and s[i-1-f[i-1]] == '['对应法则二(同理换成小括号也可以)
那么dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2],就是dp[i]结尾的最长长度是两个夹起来的长度+2再加上前一个部分的最长长度(s[i-2-f[i-1]]为结尾的最长长度)
代码:

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
typedef long long ll;
using namespace std;
const int N = 1e6 +10;
ll dp[N];
int main()
{
	ll n; string s; cin >> s;
	n = s.length(); s = "0" + s;
	ll ans = 0, anslength = 0;
	for (ll i = 1; i < n; i++)
	{
		if (s[i] == ']' and s[i - 1 - dp[i - 1]] == '[')
			dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];
		else if (s[i] == ')' and s[i - 1 - dp[i - 1]] == '(')
			dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];
		if (dp[i] > anslength)
		{
			anslength = dp[i];
			ans = i;
		}
	}
	for (int i = ans - anslength + 1; i <= ans; i++)cout << s[i];
	return 0;
}

标签:匹配,ll,括号,anslength,include,dp,P1944
From: https://www.cnblogs.com/zzzsacmblog/p/18213463

相关文章

  • 利用Python+OpenCV实现截图匹配图像,支持自适应缩放、灰度匹配、区域匹配、匹配多个结
    一、依赖安装pipinstallopencv-pythonpipinstallpyautogui二、获取系统缩放比例注意:必须先通过ctypes获取wid之后才能导入pyautogui,如果需要在其它代码中引用该模块,最好把获取分辨率这部分代码放到程序入口处,然后传递给识图函数,避免提前导入pyautogui导致获取分辨率失......
  • 实验21-正向最大匹配算法
    出现UnicodeDecodeError:'gbk'codeccan'tdecodebyte0x9finposition16:illegalmultibytesequence 修改为 即可实验结果: ......
  • P8765 [蓝桥杯 2021 国 AB] 翻转括号序列
    本文参考博客[蓝桥杯2021国AB]翻转括号序列(线段树上二分)一、问题简析线段树+二分初步分析令(的值为1,)的值为-1,则对于序列\(a_La_{L+1}a_{L+2}...a_R\),其为合法序列的条件为\[\begin{cases}\sum_{n=L}^R{a_n}=0\\\forall~k\in[L,R],\sum_{n=L}^k{a_n}\ge......
  • 【达梦问题解决】to_date转换之【文字与格式字符串不匹配】
    【问题描述】因为要转换的值中包含了不属于时间格式的字符(T,Z),这可能是数据迁移时时间参数设置不对导致的。具体没有进行考究【问题解决】使用DATE分隔符解决【手册链接】格式符解释实际分隔符的处理办法【自定义转换函数】这里的自定函数是不完善的,因为我的数......
  • 图论-二分图匹配匈牙利算法
    不得不说,如果以现实角度代入此算法的理解,就合理了很多,虽然有悖道德准则重点在于以下几点每次给女生分配男生前,都把男生全部初始化为可预定状态(即使他已经被别人成功匹配了)在所有女生中意的男生中遍历,如果发现该男生可预订就先预定,然后看他是否已经有主了,如果有主了,就dfs(matc......
  • P10513 括号
    P10513括号一、题目简析本题采用线段树求解。节点的定义structnode{ intl,r; intlcnt,rcnt;//lcnt--(的个数;rcnt--)的个数 intans,anti;//ans--()的个数;anti--)(的个数 booltag;//true--需要翻转左右孩子}tree[N......
  • 记录一个多对多数据匹配,但是效率不高
    importitertoolsimportosimportpandasaspddefget_result(hope,list_input,used):""":paramhope:#期望相加所得参数:paramlist_input:#所有数值:paramused:#已使用过列表,起始数据为空......
  • NDT匹配
    1前置知识2正态分布变换(NDT)以往的激光匹配方法有ICP方法及基于特征提取的方法,基于ICP方法因为需要绝对对应有可能出现不能收敛的情况,基于特征方法大多数需要做额外的复杂数据预处理,论文作者提出了一种基于概率的方法,NDT匹配2.1基本思路这里首先针对一帧单独的点云。NDT通......
  • (文件[夹]批量分类整理_多级匹配_交叉匹配_路径结构交叉调整)文件[夹]批量复制
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z需要先看之前发布的文章: 《如何批量复制多个文件到多个目录中(提取匹配法)》原理:对来源路径和终点路径  多次提取出关键词,再自由组合成 匹配词 情景再现:我这里有8张图片,模拟要整理的文件,路径分别如下:C......
  • 利用MKL实现OpenCV的模板匹配(matchTemplate)
    基于FFT实现OpenCV的模板匹配(matchTemplate)以TM_CCORR_NORMED为例,因为这个实现简单,并且效率高。先看公式\[R(x,y)=\frac{\sum_{x',y'}(T(x',y')\cdotI(x+x',y+y'))}{\sqrt{\sum_{x',y'}T(x',y')^2\cdot\sum_{x',y'}I(......