POJ 1141 Brackets Sequence (区间DP)

区间dp+输出方案 poj-1141-Brackets Sequence 题目链接: http://poj.org/problem?id=1141 题目大意: 给一个由[,],{,}组成的字符串序列,求增加最少的字符,使该序列能够匹配,并输出最后的方案。 解题思路: 区间dp.dp[i][j]表示从i~j 所需的最少的字符使之能匹配,转移的话要么是头尾匹配直接加中间,要么分成两段。 不过要输出到达路径,所以在用一个path[i][j]表示到达该路径时的选 阅读详情


这是一道挺好的区间DP题,类似往一个序列里插入东西的问题都可以往从中间分开考虑两块这个方向去想。

dp[i][j]表示i到j这一段最少需要插入括号的数量,显然这个数等于min(dp[i][k],dp[k+1][j]),其中0<=k<len
另外如果s[i]和s[j]匹配,还可能等于dp[i+1][j-1],注意这个更新不一定是优先的,比如()(),如果优先去掉两边变成)(,最终dp[0][3]结果为2,而实际上结果为0。

n3方循环,枚举区间长度,起点,分隔点,最后判断两边匹配的特殊情况。

这道题要还原字符串,采用递归的方法,用print(a,b)这个函数输出a到b区间的情况,记录每一个区间选择的最优分隔点是什么,以及是否选择让最左右两边匹配。然后递归输出,当a==b时,s[a]是(或)就输出(),反之一样。


注意有空行输入的情况,用scanf("%[^\n]s",str) 输入

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#include <string>
#include <map>
#define INF 1000000
int dp[105][105];
int path[105][105];
char s[105];
bool mat[105][105];

bool match(char a,char b){
	return a=='['&&b==']'||a=='('&&b==')';
}

void print(int a,int b){
	if(a>b) return ;
	if(a==b){
		if(s[a]=='('||s[a]==')') printf("()");
		else printf("[]");
	}

	else if(mat[a][b]){
		printf("%c",s[a]);
		print(a+1,b-1);
		printf("%c",s[b]);
	}
	else {
		print(a,path[a][b]);
		print(path[a][b]+1,b);
	}
}

int main(){
	scanf("%[^\n]s",s);
	int len=strlen(s);
	if(len==0){
		printf("\n");
	}
	else{
		for(int i=0;i<len;i++){
			dp[i][i]=1;
		}
		for(int i=0;i<len-1;i++){
			if(match(s[i],s[i+1])){
				dp[i][i+1]=0;
				mat[i][i+1]=1;
			}
			else{
				dp[i][i+1]=2;
				path[i][i+1]=i;
			}
		}
		for(int i=3;i<=len;i++){
			for(int j=0;j<len-i+1;j++){

				dp[j][j+i-1]=INF;
				int ist=0;
				for(int k=j;k<j+i-1;k++){
					if(dp[j][k]+dp[k+1][j+i-1]<dp[j][j+i-1]){
						dp[j][j+i-1]=dp[j][k]+dp[k+1][j+i-1];
						ist=k;
					}
				}
				if(match(s[j],s[j+i-1])){
					if(dp[j+1][j+i-2]<dp[j][j+i-1]){
						mat[j][j+i-1]=1;
						dp[j][j+i-1]=dp[j+1][j+i-2];
					}
				}
				path[j][j+i-1]=ist;
			}
		}
		print(0,len-1);
		printf("\n");
	}
	return 0;
}


48、量子系统中的信源编码 本文深入探讨了量子系统中的信源编码理论与应用,详细介绍了盲编码与可见编码、定长编码与变长编码四种主要信源编码方案。文章从经典信源编码出发,对比分析了量子场景下的压缩特性,并系统性地阐述了量子定长信源编码的构建方法及相关定理证明。同时,讨论了通用量子定长信源编码的设计思路及其在实际应用中的优势与挑战。通过理论分析与实验进展的结合,为量子信息存储、传输和处理提供了重要的理论基础和技术支持。 阅读详情

相关推荐

优化求解器性能:当分支切割算法中的gap停滞不前时如何应对

本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。

weixin_29294597的博客 381

区间dp]POJ1141 Brackets Sequence

POJ 1141 Brackets Sequence 区间动归

昨天的我现在的未来 373

VerilogEval实战指南:从基准测试到模型微调的全流程解析

本文提供了VerilogEval实战指南,详细解析了从基准测试到模型微调的全流程。VerilogEval是一个自动化、标准化的测试框架,用于客观评估大语言模型生成Verilog硬件代码的能力。文章涵盖了环境搭建、核心机制解析、利用其生成合成数据进行模型微调的策略,以及如何将其工程化集成到自动化评估流程中,为硬件设计领域的AI应用提供了完整的方法论。

yy01234的博客 1005

POJ 1141 Brackets Sequence 区间dp

Brackets Sequence POJ 1141 给一个由()[]组成的字符串,求将其补成Brackets Sequence所需的最小字符数。 (), [], (()), ([]), ()[], ()[()] 都是合法的序列。 区间动规,外层枚举区间长度:dp[i][j]=min⁡i&lt;=k&lt;j(dp[i][k]+dp[k+1][j])dp[i][j] = \min_...

侯山窝矿工 228

深度学习的卷积神经网络的煤矸石识别

在本博文中,我们提出了一种基于深度学习的煤矸石检测与识别系统,该系统采用YOLOv8算法对煤矸石进行检测和识别,实现对图片中的煤矸石进行准确识别。1.项目需求对煤矸石进行检测与识别,系统将识别出图片中的克服小块煤矸石漏检的缺陷。 2.项目实现 通过调研,本项目最终使用yolov8模型作为目标检测的模型, YOLOv8 旨在快速、准确且易使用,使其成为广泛的物体检测、图像分割和图像分类任务的极佳选择。 1.数据集:格式为jpg的3091张煤矸石图片2.YOLOv8环境配置yolo检测网络包括24个卷积层

2201_75355700的博客 792

ECC椭圆曲线加解密原理详解(配图)

椭圆曲线加解密原理详解 本文主要参照:ECC椭圆曲线详解(有具体实例)[1] 前言: 椭圆曲线(ECC)加密原理跟RSA加解密原理比起来,可真是晦涩难懂。拜读了大神Kalafinaian文章“ECC椭圆曲线详解(有具体实例)”,终于看到了参透的曙光。 由于原文中有微小的瑕疵,也为了便于阅读起来更加流畅,我重新整理了一下这篇文章。 为什么使用椭圆曲线加密算法? RSA的解决分解整数问题需要亚指数...

Mark的博客 7万+

poj1141Brackets Sequence 区间dp+输出路径

最近看区间dp也看了好几题了,终于知道了大概的思路,当然只是大概……只会套模板,稍微变一变就GG了,还是没真正理解…… 先上区间dp的超级简单好写的模板 for(l=0;l   for(i=0,j=i+l;j     { 如果可以更新或初始化,更新或初始化dp[i][j],     for(k=i;k       比较dp[i][j]和dp[i][k]+dp[k+1][j],如果能更新

ctrss的博客 525

nvprof:CUDA编程性能分析工具

NVIDIA提供了具有高性能计算的GPU产品,如何检验硬件的实际性能,写出高效的CUDA代码让算力加速卡物尽其用,那可以通过其配套提供的“护城河”软件工具链来检验和帮助发挥GPU的性能:nvprof。如下,对于将8192个A,B向量进行向量加法运算,即C[i] = A[i] + B[i],当软件设置不同的blocknum, threadnum时候,CUDA执行kernel的时间是不同的。比如如下命令,可以看到程序tmp1的总体性能,下面一行是打印gpu的执行时间情况。

Briwisdom的博客 3384

(区间dp)poj 1141 Brackets Sequence

题目 poj1141 题意: 给出字符串,求使其成为常规字符串的最短字符串 例如,以下所有字符序列都是常规方括号序列: (),[],(()),([]),()[],()[()] 并且以下所有字符序列都不是: (,[,),)(,([)],([(] 思路: dp数组是记录区间 [ i , j ] 成为常规字符串的最短次数。 在区间 [ i , j ] 内, 如果a [ i ] = ‘(’ 并且a [ j ] = ‘)’(或a [ i ] = ‘[’ 并且a [ j ] = ‘]’ ),则 dp[i][j]=min

ymxyld的博客 188

非洲秃鹫优化算法(AVOA)详解:从原理到实战

非洲秃鹫优化算法(AVOA)是一种模拟秃鹫觅食行为的元启发式算法。该算法通过数学建模秃鹫的群体分工、饥饿感知和食物竞争等行为,将优化问题转化为智能觅食过程。AVOA包含四个关键阶段:(1)种群初始化与最佳秃鹫选择;(2)饥饿率控制探索与开发平衡;(3)探索阶段模拟远距离飞行搜索;(4)开发阶段模拟食物源附近的竞争行为。算法采用饥饿率函数实现自适应搜索,初期偏向全局探索,后期转向局部开发。实验表明AVOA在标准测试函数和工程设计问题上表现出优越性能,其创新性在于将秃鹫独特的生物学特性转化为高效的优化机制。

qq_42212808的博客 228

【Agent实战】Agent Skills 深度解析:从原理到落地的完整指南

本文深入解析了Agent Skills的概念及其在AI协作中的实际应用。Skill是一种可被AI按需发现和加载的任务执行说明书,它将团队经验、规则和步骤固化为结构化文档,如SKILL.md。文章阐明了Skill与Prompt、MCP、Function Calling的关系,强调Skill专注于"怎么做"而非底层能力。重点介绍了SKILL.md的编写规范,包括元数据命名规则、描述技巧和正文内容优化,旨在帮助开发者高效构建可复用的知识资产,提升Agent的任务执行稳定性与专业性。通过清晰的示例和对比,为AI架构

少说,多做 117

poj1141 Brackets Sequence (区间dp)

点击打开链接 刚学区间dp,所以先去上网搜了别人的代码,区间dp那点明白了,就是不断更新一个区间内需要填加括号的数目,直到值是最小值。然后是那个打印路径,那个地方一直没看懂,不明白为什么那样保存,然后自己手动模拟了一遍,又照着网上的代码敲了一遍才逐渐明白,其实就是保存一个区间是怎么分割的,把一个区间分成若干个子区间,怎样合并使值达到最小,区间值达到最小之后两个相邻的子区间断开的地方就是要保存的值

ScorpioN___的博客 504

基于深度学习的水质预测:多参数监测与预测

在本篇博客中,我们详细介绍了如何使用深度学习技术处理水质预测问题,包括数据集的准备与预处理、多层感知机模型的构建、模型的训练与评估以及模型优化策略。我们使用 Python 语言基于 TensorFlow 和 Keras 框架实现了模型,并给出了各种模型优化方法及对应代码。通过实践,我们可以发现深度学习技术在水质预测方面具有很好的应用潜力。在实际应用中,我们还可以根据具体问题和数据集进一步调整和优化模型,以获得更好的预测性能。

斌擎科技 1081

poj 1141 Brackets Sequence 区间dp+记录断点的输出

题目: Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35575 Accepted: 10287 Special Judge Description Let us define a regular brackets sequence in the following way: Emp...

V4yne.的博客 177

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ 1141 Brackets Sequence 括号匹配 区间DP

题目描述:DescriptionLet us define a regular brackets sequence in the following way: Empty sequence is a regular sequence. If S is a regular sequence, then (S) and [S] are both regular sequences. If A an

喵头鹰的博客 438

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ 1141 Brackets Sequence【题解报告|有趣的区间dp】

今天很高兴,十几个清华本科和30个左右985专业第一,经过三天的角逐,终于让我拿到了清深的offer,夏令营的第一个收获!可以安心的九推冲击清软了 题目大意 给一些括号,求让它们合法最少要加上多少括号,并输出加上后的结果,合法的定义: 1.空串是合法的 2.若S是合法的,则[S]和(S)均是合法的 3.若A和B是合法的,则AB是合法的 思路分析 一道类似的区间dp问题,区间dp问题写的不多,右边这道回文子串算是一个,但是自己思维却是被这道题固化了,遇到最小括号匹配时也想用相同的dp方法来作,先附上我第一遍的

csyifanZhang的博客 458

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ 1141 Brackets Sequence(区间DP记录路径)

题意:给出一串括号,要你补上最少的括号使这一串括号都匹配。 思路:dp[i][j]表示区间(i,j)最少要补的括号数。对于每个dp[i][j],初始化为不与后面任何括号匹配的情况,那么显然我们需要填一个括号。这里我们从i = j - 1 到 i = 0扫描区间,所以有dp[i][j] = dp[i+1][j] + 1。 接下来再考虑(i,j)中是否又于s[i]匹配的括号。对i dp[i][

ACMiao的博客 473

POJ 1141 Brackets Sequence(区间DP)

Description Let us define a regular brackets sequence in the following way:  1. Empty sequence is a regular sequence.  2. If S is a regular sequence, then (S) and [S] are both regular sequences

Must so 430

poj 1141 Brackets Sequence 【区间DP+路径记录】

题意: 给你一个只包括大小括号的串,一个合法串的定义如下: 1.空串是合法的; 2.若s为合法的,则 [s] (s) 也为合法的; 3.若 a,b为合法的 , ab 也是合法的。 给你一个长度小于100的串,请加入最少的括号使其合法化。 解法: 区间dp,记录转移路径,类似 poj 2955,不过将dp[i][j]的意义改为使子段变为合法的最少插入数,O(n3)。

Arrows' Dairy 586

poj 1141Brackets Sequence[区间dp]

原题链接poj 1141 Brackets Sequence 由于对括号匹配的时候不只有一种方案,而本题要求要找最少的那种匹配方案,故可以用区间dp; dp[i][j]表示从i到j之间为了匹配所需要的最少添加数。 状态转移方程 dp[i][j]=dp[i+1][j-1] (s[i]==s[j]);dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])(i 又因

smallfish的专栏 533

POJ 1141——Brackets Sequence【区间DP & 打印路径】

题目传送门 Description Let us define a regular brackets sequence in the following way: Empty sequence is a regular sequence. If S is a regular sequence, then (S) and [S] are both regular sequences. If A ...

NIRVANA REBIRTH 303

ZOJ 1463 POJ 1141 Brackets Sequence (区间DP) #by Plato

ZOJ 1463 POJ1141 Brackets Sequence (区间DP) #by Plato http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=463   题意: 给一个括号序列,求 为使序列合法化所需要添加的最少括号书。要求输出合法化后的序列。   Idea: 比较明显的DP了, f[i][j] 代表从 第

XDU_Truth的专栏 1632

poj1141 Brackets Sequence(区间dp)

poj1141分析第一次做区间dp,讲解的话这微博主讲的很清楚了。http://www.cnblogs.com/neulike/archive/2011/02/12/1952600.html题目http://poj.org/problem?id=1141代码#include <cstdio> #include <algorithm> #include <vector> #include <cstri

天道酬勤 350

POJ2955 Brackets && poj 1141Brackets Sequence (区间dp)

poj 2955 题意 给你一个括号序列,求最长合法括号序列子串的长度 题解 dp[i][ j]表示区间 i 到 j 之间最长合法括号子串的长度,dp[ i ][ j ] 如果s[i] == s[j],dp[ i ][ j ] = dp[i+1][j-1], 更新最大值的方法是枚举 i 和 j 的中间值,然后让 dp[ i ] [ j ] = max ( dp [ i ] [ j ] , dp ...

weixin_43763889的博客 161

poj 1141 Brackets Sequence(区间DP记录路径)

题目链接: http://poj.org/problem?id=1141 题目大意: 给一个不完全匹配的括号序列,问最少需要增加多少个括号能够使括号序列完全匹配,输出完全匹配以后的序列。 思路: 区间DP。我们设dp[i][j]代表i~j区间里面使得括号完全匹配最少需要增加的括号数。 那么如果s[i]和s[j]是匹配的,就有dp[i][j]=dp[i+1][j-1]。 然后就在i

hahahaha 572

poj 1141 Brackets Sequence 区间dp,分块记录

Brackets Sequence Time Limit:1000MS Memory Limit:65536K Total Submissions:35049 Accepted:10139 Special Judge Description Let us define a regular brackets s...

weixin_30361641的博客 167
上一篇: POJ 1087 A Plug for UNIX(二分图匹配)
下一篇: HDU 3974 Assign the task (线段树)
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值