括号配对(信息学奥赛一本通- P1572)
【题目描述】Hecy 又接了个新任务BE 处理。BE 中有一类被称为 GBE。以下是 GBE 的定义空表达式是 GBE如果表达式 A 是 GBE则 [A] 与 (A) 都是 GBE如果 A 与 B 都是 GBE那么 AB 是 GBE。【输入】输入仅一行为字符串 BE。【输出】输出仅一个整数表示增加的最少字符数【输入样例】[])【输出样例】1【提示】数据范围与提示对于 100% 的数据输入的字符串长度小于 100。在区间动态规划的题库中括号匹配类问题占据了半壁江山。今天我们要解决的这道Hecy的GBE 任务就是一个非常典型的代表。题目要求我们通过最少的添加字符操作把一个乱序的括号字符串变成合法的GBE序列。1. 题目重述与分析输入一个由(,),[,]组成的字符串S。输出最少需要添加多少个字符才能使S变成合法的括号序列数据范围长度 00。核心思维转换面对“最少添加”这类问题直接思考在哪里加字符往往比较困难。我们可以尝试逆向思维如果我们能保留字符串中尽可能多的字符让它们本身就构成一个合法的子序列。那么剩下的那些“无法匹配”的字符就是必须通过添加字符来补全的。结论最少添加数字符串总长度-最长合法子序列的长度这样问题就从“求最少添加”转化为了“求区间内的最长合法子序列”。这正是区间DP最擅长的领域。2. 动态规划设计状态定义定义dp[i][j]为字符串中下标从i到j的子串中最长合法子序列的长度。状态转移方程对于区间[i, j]我们依然采用区间DP的标准“三板斧”1. 拼接结构任何一个区间都可以从中间某个点k切开其最长合法长度等于左边加右边。这也是区间 DP 的基础。dp[i][j] 注意这个枚举其实也隐含了“放弃 s[i]”或者“放弃 s[j]”的情况当ki或kj-1且边界值为0时。2. 包围结构如果区间的左右端点s[i]和s[j]恰好能配对即()或[]那么它们可以把中间的最优解“包”起来贡献 2 个长度。边界与初始化初始化memset(dp, 0)。长度为 1 的区间如[无法构成合法序列长度自然为 0符合逻辑。循环顺序经典的枚举长度len枚举左端点i枚举分割点k。3. 完整代码#include iostream #include cstring//对应memset #include algorithm//对应max using namespace std; string s; int dp[110][110];//dp[i][j]代表s[i]-s[j]的最长合法子序列 int main(){ cins; //因为求最长合法子序列 所以初始化为0 memset(dp,0,sizeof(dp)); //枚举区间长度 len代表区间长度 //从小到大计算出所有所有区间的合法子序列长度 //计算大区间必须先计算出小的 for(int len2;lens.size();len){ //枚举左端点i (确保 ilen-1不越界) for(int i0;is.size()-len1;i){ int jilen-1;//右端点 //1尝试“包围结构”判断s[i]和s[j]是否配对 if((s[i](s[j]))||(s[i][s[j]])) //如果配对长度中间部分的长度 2 //这里的dp[i1][j-1]已经在len-2的时候算过了 dp[i][j]max(dp[i][j],dp[i1][j-1]2); //2尝试“拼接结构”枚举分割点k取最大值这个循环同时也覆盖了“丢弃 s[i]”或“丢弃 s[j]”的情况 for(int ki;kj;k){//分界线k dp[i][j]max(dp[i][j],dp[i][k]dp[k1][j]); } } } //输出字符串长度剪去最长合法子序列长度就是落单未配对的数量 //即为我们需要增加的数量 couts.size()-dp[0][s.size()-1]; return 0; }4. 易错点与总结下标问题string的下标是从0开始的所以循环范围是0到n-1。转移顺序一定要先处理if配对的情况再跑for k循环来更新最大值或者像代码中这样在for k中不断取max覆盖。思维误区有些同学会尝试直接定义dp[i][j]为“最少添加数”。如果定义为最少添加数转移方程变为若配对dp[i][j] min(dp[i][j], dp[i1][j-1])通用dp[i][j] min(dp[i][k] dp[k1][j])这也是一种解法但“最长合法子序列”的思路往往更容易理解因为它把问题变成了我们在LIS或LCS中熟悉的“求最长”模型。通过这道题我们可以看到区间 DP 的核心在于如何把大区间拆分成小区间。无论是“拼接”还是“包围”本质上都是在寻找问题的最优子结构。

相关新闻

移动设备统计:行业趋势与市场洞察

移动设备统计:行业趋势与市场洞察

移动设备统计:行业趋势与市场洞察 引言 随着科技的飞速发展,移动设备已成为人们日常生活中不可或缺的一部分。从智能手机到平板电脑,再到可穿戴设备,移动设备市场正呈现出蓬勃发展的态势。本文将基于最新的市场数据,对移动设备行业进行深入分析,旨在揭示行业趋势与市场…

2026/7/6 23:11:17 阅读更多 →
财务姐姐偷偷求我的Python代码:3秒对账,10秒报税,1分钟搞定月报

财务姐姐偷偷求我的Python代码:3秒对账,10秒报税,1分钟搞定月报

前言 “财务部王姐悄悄拉我到楼梯间:‘你上次那个代码…能教我吗?月底对账我真的快瞎了。’” 一、3秒对账:VLOOKUP的终极进化 python def 智能对账(银行流水, 内部记录): “”“模糊匹配自动标记差异”“” # 传统对账:肉眼比对 …

2026/7/6 3:40:24 阅读更多 →
Spark在气象大数据分析中的实践

Spark在气象大数据分析中的实践

Spark在气象大数据分析中的实践 关键词:Spark、气象大数据、数据处理、数据分析、分布式计算 摘要:本文围绕Spark在气象大数据分析中的实践展开。首先介绍了气象大数据的特点和分析需求,以及Spark作为分布式计算框架的优势。接着详细阐述了Sp…

2026/5/17 2:30:05 阅读更多 →

最新新闻

KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案

KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案

KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否正在为Windows系统激活而烦恼?面对复杂的命令行操作和昂贵…

2026/7/6 23:10:11 阅读更多 →
Balena Etcher终极指南:三步搞定系统启动盘的免费神器

Balena Etcher终极指南:三步搞定系统启动盘的免费神器

Balena Etcher终极指南:三步搞定系统启动盘的免费神器 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作系统启动盘而烦恼吗?命令…

2026/7/6 22:59:58 阅读更多 →
5分钟高效找回QQ空间青春记忆:GetQzonehistory智能数据恢复指南

5分钟高效找回QQ空间青春记忆:GetQzonehistory智能数据恢复指南

5分钟高效找回QQ空间青春记忆:GetQzonehistory智能数据恢复指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在为QQ空间里那些消失的青春记忆而烦恼吗?那些…

2026/7/6 22:57:55 阅读更多 →
终极指南:如何在Switch和WiiU之间自由转换塞尔达传说旷野之息存档

终极指南:如何在Switch和WiiU之间自由转换塞尔达传说旷野之息存档

终极指南:如何在Switch和WiiU之间自由转换塞尔达传说旷野之息存档 【免费下载链接】BotW-Save-Manager BOTW Save Manager for Switch and Wii U 项目地址: https://gitcode.com/gh_mirrors/bo/BotW-Save-Manager 你是否曾经为《塞尔达传说:旷野之…

2026/7/6 22:55:53 阅读更多 →
OpenCV 4.9 与 MediaPipe 手势识别:3 种方案在树莓派 5 上的实时性能实测

OpenCV 4.9 与 MediaPipe 手势识别:3 种方案在树莓派 5 上的实时性能实测

OpenCV 4.9 与 MediaPipe 手势识别:树莓派 5 上的三种实时方案性能对比当一块信用卡大小的开发板遇上计算机视觉,会碰撞出怎样的火花?树莓派 5 凭借其升级的四核 Cortex-A76 处理器和 VideoCore VII GPU,正在边缘计算领域掀起新的…

2026/7/6 22:55:53 阅读更多 →
ICM-42688-P与PIC32MX675F512L在工业自动化中的高性能应用

ICM-42688-P与PIC32MX675F512L在工业自动化中的高性能应用

1. ICM-42688-P与PIC32MX675F512L的黄金组合解析在工业自动化和机器人控制领域,传感器与处理器的协同工作能力直接决定了系统性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动传感器,与Microchip的PIC32MX675F512L微控制器形成的解决方案&…

2026/7/6 22:55:53 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻