题解:[AGC054D] (ox)

news/2025/2/4 21:50:19/文章来源:https://www.cnblogs.com/Kenma/p/18698525

前言

好题。

思路分析

一个朴素的想法是,对于每种字符,我们决策它放的位置,做四路归并,这样复杂度为 \(O(n^4)\)

但是这样显然没优化前途。考虑做一些观察。

  • o 存在与否并不重要:o 放在任何位置都是合法的,所以为了最小化代价,我们把 o 放在原来的位置即可;

  • () 的移动方案和 x 的移动方案是独立的:对于 x 来说,只要存在合法的 (),那么它一定可以放在 () 中间,而具体是哪个 ( 和哪个 ) 匹配并不重要。

有了这两个性质,我们就可以做 () 和 ox 的两路归并了,复杂度为 \(O(n^2)\)

具体地,设 \(f_{i,j}\) 表示一路枚举到 \(i\),一路枚举到 \(j\) 的最小代价,从 \(f_{i,j-1}\)\(f_{i-1,j}\) 转移即可。

代码实现

/*
没啥细节,不写了贺一个 
*/
#include<bits/stdc++.h>
using namespace std;
const int MAXN=8005;
char s[MAXN];
int n,m,sz,a[MAXN],b[MAXN],w[MAXN],dp[MAXN][MAXN],fa[MAXN][MAXN],fb[MAXN][MAXN];
inline void chkmin(int &x,const int &y) { x=x<y?x:y; }
signed main() {scanf("%s",s+1),sz=strlen(s+1);for(int i=1;i<=sz;++i) {if(s[i]=='('||s[i]==')') a[++n]=i;else b[++m]=i;}for(int i=1;i<=n;++i) {w[i]=w[i-1]+(s[a[i]]=='('?1:-1);if(w[i]<0) {for(int j=i+1;;++j) if(s[a[j]]=='(') {rotate(a+i,a+j,a+j+1); break;}w[i]+=2;}}memset(dp,0x3f,sizeof(dp));dp[0][0]=0;for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) dp[0][0]+=a[j]<a[i];for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) {fa[i][j]=fa[i][j-1]+(a[i]<b[j]);fb[i][j]=fb[i-1][j]+(b[j]<a[i]);}for(int i=0;i<=n;++i) for(int j=0;j<=m;++j) {if(i<=n) chkmin(dp[i+1][j],dp[i][j]+fa[i+1][j]);if(j<=m&&(w[i]||s[b[j+1]]=='o')) chkmin(dp[i][j+1],dp[i][j]+fb[i][j+1]);}printf("%d\n",dp[n][m]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878755.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Graphviz-画数据结构图的利器

1.Win系统上的安装 安装Graphviz的方法有很多,以下是手动安装的方式: 1.访问 https://graphviz.org/download/,选择你想要下载的版本,手动安装选择ZIP安装包;2.解压下载的zip压缩包到你选择的文件目录,例如:D:\Graphviz-12.2.1-win64; 3.将Graphviz的安装目录(如:D:\…

4G优先级切换

本文来自博客园,作者:{IceSparks},转载请注明原文链接:https://www.cnblogs.com/IceSparks/p/18698508

4G与5GSIB对比

本文来自博客园,作者:{IceSparks},转载请注明原文链接:https://www.cnblogs.com/IceSparks/p/18698503

AI赋能软件测试:未来已来,你准备好了吗?

ps:文末有福利领取哦引言 在数字化转型的浪潮中,软件测试作为保障产品质量的关键环节,正面临着前所未有的挑战。 传统的测试方法已难以满足快速迭代和复杂场景的需求,而人工智能(AI)的引入,则为软件测试带来了革命性的变化。 本文将从现状、优势、挑战及未来趋势四个方面…

C语言 输出回文数

回文数,既把数值的每个数 颠倒输出(从右往左输出),再合起来的数如果和原来的值相等 例:输出0 至 1993 的回文数#include <stdio.h>int main() { int i ,x ,d ,a ; for(i=0;i<=1993;i++) {a = i; x = 0; while (a != 0) { d = a%10; //每次都取a值的最后一位 x = …

洛谷 P3842 [TJOI2007] 线段 题解

题目大意 原题链接 给你一个大小为 \(n \times n\) 的矩阵,上面有 \(n\) 条线段(一行一条)。你只能向右,向下,向左走。每一条线段都必须完整的经过。请问从 \((1,1)\) 到 \((n,n)\) 最短路径长度是多少? 解法 这道题可以使用最短路或者DP来做。我觉得DP本题更简单一点所以我…

数据降维技术研究:Karhunen-Love展开与快速傅里叶变换的理论基础及应用

在现代科学计算和数据分析领域,数据降维与压缩技术对于处理高维数据具有重要意义。本文主要探讨两种基础而重要的数学工具:Karhunen-Love展开(KLE)和快速傅里叶变换(FFT)。通过分析这两种方法的理论基础和应用特点,阐述它们在数据降维中的优势和适用场景。 Karhunen-Lov…

一个Python GC的小Bug

这个代码是在看了“码农高天”的视频照模仿的。虽然 GC 能完成大部分内存管理的工作,但是基于性能计数器的GC确实存在小 Bug,这一点还是需要通过del和gc.collect手动管理。 from typing import Optionalclass Object:def __init__(self, name: str) -> None:self.obj: Opt…

2月做题记录

还有一个月。2月做题记录✩ trick ✯ 会大部分,要\(tj\)提示 ✬ 会小部分/完全没想到,看了\(tj\)才会 ◈ 脑电波 ✡ 有某一算法的神秘通用性质 ⊗ 待补目录2月做题记录字符串CF1827CCF1913FP10716P11150 ✩✯树[NOI2021] 轻重边做法1 ✩做法2做法3 ✡《简单树剖练习题》[QOJ9…

第六节 特征提取和无监督学习

没有标签y依旧提取出特征你的模型朝着哪个方向压缩特征,由你的标签来定自监督学习:从x中提取一部分作为自己的标签y,然后用x预测y 在自监督学习中,需要根据数据的特点设计一些自监督任务,这些任务通常基于数据的一些内在属性或关系来构建。例如,在图像数据中,可以设计图像…

产线MES 和 车间MES的区别与联系

制造执行系统(MES)在现代制造业中扮演着至关重要的角色,它连接着企业的计划层与生产现场,推动生产效率提升和质量管控强化。本文将深入探讨产线级MES和车间级MES的区别与联系,帮助读者更好地理解这两种MES系统如何协同工作,共同提升企业的生产管理水平。制造执行系统(ME…