URAL 1183.Brackets Sequence ( DP+记录路径)

2024-08-21 08:08

本文主要是介绍URAL 1183.Brackets Sequence ( DP+记录路径),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:加入最少数量的括号使得这个括号序列合法。

思路:DP

dp[ i ][ j ]表示 区间[ i , j ] 变成合法需要加的最少括号数。

而,要求dp[ i ][ j ]有三种情况

(1) i==j : dp[ i ][ j ]=1 就是加上对应的括号

(2) ch[ i ] 和 ch[ j ] 不能配对 : min(dp[i][k]+dp[k+1][j]) for k=i,i+1,...,j-1

(3) ch[ i ] 和 ch[ j ] 能配对:

如果i+1==j    dp[i][j]=0;

否则 dp[i][j] = 将 dp[i+1][j-1]  与 (2) 中的情况相对比,求最小。

这就求出了数量。要显示出来,就DP的时候,同步记录操作。

op[ i ][ j ] = 0 :表示加上与这个括号对应的括号

op[ i ][ j ] =-1:表示ch[ i ] 与 ch[ j ] 是一对括号

op[ i ][ j ] =k>0: 表示分成两组:[ i , k ] 和 [ k+1 , j ]

然后最后递归输出就行了。


DP部分代码:

for(int i=n;i>0;--i){for(int j=i;j<=n;++j){if(i==j){dp[i][j]=1;op[i][j]=0;//0 means add the one that matchescontinue;}int K=i,ANS=dp[i][K]+dp[K+1][j];for(int k=K+1;k <j;++k){if(dp[i][k]+dp[k+1][j]<ANS){ANS=dp[i][k]+dp[k+1][j];K=k;}}dp[i][j]=ANS;op[i][j]=K;//positive value means to split at op[i][j] if(ch[i]=='['&&ch[j]==']'||ch[i]=='('&&ch[j]==')'){if(i+1==j){dp[i][j]=0;op[i][j]=-1;}else if(dp[i+1][j-1]<dp[i][j]) {dp[i][j]=dp[i+1][j-1];op[i][j]=-1;//-1 means ch[i] and ch[j] matches}}}
}

显示部分代码:

void Show(int i,int j){if(~op[i][j]){if(op[i][j]){//positive value : split at op[i][j]Show(i,op[i][j]);Show(op[i][j]+1,j);}else{//op[i][j]=0 :add the one that matchesif(ch[i]=='('||ch[i]==')') printf("()");else printf("[]");}}else{//op[i][j] = -1 :ch[i] and ch[j] matches printf("%c",ch[i]);if(i+1!=j) Show(i+1,j-1);printf("%c",ch[j]);}
}


这篇关于URAL 1183.Brackets Sequence ( DP+记录路径)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092598

相关文章

利用Python把路径转为绝对路径的方法

《利用Python把路径转为绝对路径的方法》在Python中,如果你有一个相对路径并且想将其转换为绝对路径,你可以使用Path对象的resolve()方法,Path是Python标准库pathlib中... 目录1. os.path.abspath 是什么?怎么用?基本用法2. os.path.abspat

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs