当前位置: 首页 > news >正文

Codeforces Round 1082 (Div. 2) E

今天看题解给我看红温了,第一次遇到dp转移方程给了公式但是没有给全甚至没有说明没有给全的情况,分析了三小时硬是分析不出来。

设所选子序列在原字符串中的起始下标为 s1​,结尾下标为 sk​。

定义'('对前缀和的贡献为 +1,')'为 −1,并记presum[i]为原字符串前 i个字符的前缀和。

1. 按结尾字符分类讨论

(1)结尾是'('的情况

右移后,这个'('会移动到子序列的开头 s1​位置。此时从 s1​开始的前缀和只会增加或不变,不可能减少,因此绝对不会导致新序列非法。

'('结尾时,其前面的子序列(包括空序列)可以任意选择。

(2)结尾是')'的情况

右移后,这个')'会移动到 s1​位置,此时从 s1​开始的前缀和只会减少或不变

  • 若不变,显然不会导致非法;

  • 若减少,则必须小心,因为可能使前缀和低于 0,破坏括号序列合法性。


2. 前缀和的变化规律

以样例3说明:

原串:"(()())",选第 3 到第 5 个位置(下标从 1 起),即"())",右移后得到"(())()"

  • presum[3]不变(因为 s1​之前的字符未动);

  • presum[4]原本是 2,右移后变为 0。

一般规律

若所选子序列中某个位置原来是'(',右移后它可能被更靠后的字符替换,导致从该位置起直到某个位置之前,前缀和减少 2

若原来是')',则替换后前缀和不变。

因此,关键在于所选子序列中'('的位置


3. 合法性条件的提炼

考虑以位置 i结尾、且以')'结尾的子序列,其右移后仍合法的条件:

  • 若 S[i]=’)’,则不论前面怎么选,右移后这个')'移到开头,不会使前缀和低于 0(因为原串合法,开头一定是'('才会出现')')。

  • 若 S[i]=’(’,则右移后它可能被后面的')'替换,导致从开头到该位置的前缀和减少 2。因此,必须保证从子序列开头到最后一个’(’之后一个位置,其前缀和都≥ 2,这样减少 2 后才不会低于 0。


4. 尝试用 DP 计数

定义dp[i]表示以位置 i 结尾,且右移后仍合法的非空子序列个数。

转移考虑最后一位是'('')'的情况:

  • 最后一位是')':前面可以接任意')'结尾的合法子序列,即前面所有dp[j](其中 S[j]=’)’)都可以直接转移过来,并且还可以单独以这个')'作为一个子序列(+1)。

  • 最后一位是'(':前面只能接那些从子序列开头到当前位置之前所有前缀和 ≥ 2​ 的合法子序列。这对应着一个“安全”的前缀和区间,需要用一个计数器维护。

因此,可以维护两个累加值:

  • cnt1:前面所有以')'结尾的dp值之和(对应上述第一种情况)。

  • cnt2:前面所有“安全”的以'('结尾的dp值之和(对应上述第二种情况)。

转移时:

dp[i]=1+cnt1+cnt2

并按照 S[i]更新cnt1cnt2

  • 若 S[i]=’)’,将dp[i]加入cnt1

  • 若 S[i]=’(’,将dp[i]加入cnt2

  • 若当前位置前缀和降为 0,说明进入了一个新的“最低点”,之前累积的cnt2不再安全,需要清零。

http://www.cnnetsun.cn/news/1287478.html

相关文章:

  • SpringBoot基于Web的智能家教服务平台
  • NVIDIA Profile Inspector 深度优化指南:从硬件潜力到极致体验
  • 【正点原子I.MX6U-MINI】从零到系统启动:uboot编译与EMMC固化的完整实践
  • 快马平台一键生成Spring Boot用户管理原型,5分钟搭建可运行后端服务
  • 基于立创地文星开发板的USB-Hub电压电流表DIY全解析:硬件选型、软件配置与外壳设计
  • 【数字电子技术课程设计】基于FPGA的高精度数字电子钟设计与实现
  • Allegro17.4异形焊盘实战:从DXF导入到Padstack的完整流程
  • 提升创作效率:用快马平台打造可实时迭代的旗博士口播智能体
  • 如何在遵守协议前提下实现高效内容访问:解锁信息价值的技术方案与合规指南
  • 快马平台五分钟搭建openclaw抓取原型,验证你的数据采集想法
  • 泰山派RK3576开发板Android 14系统ADB调试与投屏实战指南
  • ESP32双模通信实战:从Wi-Fi联网到蓝牙透传的物联网应用
  • Unity SLG战棋游戏开发实战:从源码解析到功能实现
  • AI赋能开发:让快马平台的Kimi模型优化你的esp8266代码,实现智能节电与稳定上报
  • FBX转STP在线工具大比拼:哪款更适合你的3D设计需求?
  • RK3566小手机MIPI-DSI显示适配与背光驱动实战
  • Qwen3.5-35B-A3B-AWQ-4bit入门指南:清晰图优先策略+分步提问技巧详解
  • gte-base-zh效果对比:与其他开源嵌入模型的横向评测
  • 基于NTC热敏电阻的电子鞭炮明火点火系统设计
  • CANoe_UDS-bootloader自动化测试系列(三)核心引擎:CAPL构建UDS诊断报文收发与状态机解析框架
  • GLM-OCR快速入门实战:上传图片秒出结果,文本、表格、公式都能识别
  • Gemma-3-12b-it持续集成教程:GitHub Actions自动化镜像构建流程
  • 对标百度网盘:基于SpringBoot开发的分布式文件系统,功能非常强大,开源了!
  • 解决Python中onnxruntime DLL加载失败的三大实战方案
  • XJTUSE - 从零构建:一个基于自拟协议与FPGA的通信装置实战
  • 从零部署到实战:OpenPCDet 3D检测环境搭建与模型调优全攻略
  • 深入解析32/64位Windows虚拟扫描仪的自定义图片加载机制
  • AI智能二维码工坊实战落地:企业宣传页集成部署详细步骤
  • [深度解析]机器人正向运动学建模:从关节角度到末端坐标的实战推演
  • 均匀面阵波束合成方向图的MATLAB仿真与关键参数影响分析