题解:uoj748 机器人表演

news/2025/10/27 9:34:05/文章来源:https://www.cnblogs.com/LUlululu1616/p/19167990

每步都很厉害的一个题。

题意:给出一个不一定匹配的括号序列,求其和任意给定长度 \(t\) 的合法括号序列合并后有多少种本质不同的串。\(n,t\le 300\)

做法:

首先考虑判定怎么做,我假设有原串 \(s\),我如何判定一个串 \(t\) 可以被分解为 \(s\) 和一个合法括号串呢?设 \(f_{i,j}\) 表示目前已经匹配到了 \(s_i, t_j\),是否可行,\(a,b\) 分别代表两个串括号序列的前缀和,左括号为 \(1\) 右括号为 \(-1\)。有转移式:

\[f_{i, j}\rightarrow f_{i+1,j+1}(s_i=t_j) \]

\[f_{i,j}\rightarrow f_{i,j+1}(a_i\le b_{j+1}) \]

第一种转移显然,第二种转移其实是我选择用括号串上的一位去补,但是因为我往 \(s\) 中塞这个括号串之后,前缀和是不会小于我原串的前缀和的,所以需要 \(a_i\le b_{j+1}\)

那么怎么计数?直接用 dp of dp 的套路,\(dp_{i,j,V}\) 表示已经填好了 \(t\) 的前 \(i\) 位,\(b_i=j\),同时我们把 \(f_{?,j}\) 压成一个二进制串作为 \(V\),这样可以做到 \(2^nn(n+t)^2\)

然后感觉没有什么优化空间了。但是经过观察或者打表会发现,我们其实只需要管 \(V\) 的最高位即可,我们来证明这个结论。

先有一个很显然的观察,如果 \(f_{i,j}=1\),那么 \(a_i\le b_{j}\),考虑转移过程易得。

考虑目前 \(dp_{i,j}\) 的最高位为 \(k\),若加入新的一位为 \(x\),有:

  • \(s_{k+1}=x\),那么显然可以直接匹配,转移贡献 \(k+1\)

  • 否则如果 \(x\) 为左括号或 \(a_k<b_{i}\),显然会满足 \(a_k\le b_{j+1}\),贡献为 \(k\)

  • 否则如果 \(x\) 为右括号且 \(a_k=b_{i}\),那下一位就匹配不了了。我们会说明会变成 \(k'=\max\limits_{t<k,a_t<a_k} t\)。首先说明这个串是合法的,因为 \(s[k'+1,k]\) 这一段其实是一个合法的括号前缀,否则会有更大的 \(k'\),所以我们可以得出 \(f_{k',i}\) 是合法的,这样就可以把这个匹配进去了。同时也很容易说明更大的 \(k'\) 不行。

这样我们就可以只记 \(k\) 而不用记 \(V\) 了,复杂度优化到 \(O(n^3)\)

然后官方题解评论区提到了另一种理解方法,就是我考虑贪心地进行匹配 \(s, t\),每次不能匹配就给括号序列解决,但是这样同样会遇到出现右括号而左括号不足的情况,这样就需要我们类似反悔贪心,回退到上一个前缀和小于当前位置的位置,这个串刚好就是开头一个左括号加上一个合法括号序列,可以再加一个右括号。正确性由上述证明得到也是对的。按照这个贪心过程设计 dp 也可以通过。

因为下面这个做法常数小一点写了下面这个做法:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 305, mod = 998244353;
int dp[maxn][maxn][maxn], pre[maxn], n, t;
string s;
signed main() {cin >> n >> t >> s; s = ' ' + s;for (int i = 1; i <= n; i++) {int s1 = 0;for (int j = i; j >= 1 && s1 >= 0; j--) {s1 += (s[j] == '1' ? 1 : -1);pre[i] = j;}if(s1 >= 0)pre[i] = 0;}dp[0][0][0] = 1;for (int j = 0; j <= t; j++)for (int k = 0; k <= j; k++) {for (int i = 0; i <= n; i++) {if(!dp[i][j][k])continue;if(i < n) dp[i + 1][j][k] = (dp[i + 1][j][k] + dp[i][j][k]) % mod;if((i == n || s[i + 1] == '1') && j < t)dp[i][j + 1][k] = (dp[i][j + 1][k] + dp[i][j][k]) % mod;if((i == n || s[i + 1] == '0') && k < j)dp[i][j][k + 1] = (dp[i][j][k + 1] + dp[i][j][k]) % mod;if((i == n || s[i + 1] == '0') && k >= j) {int tp = (i - pre[i] + 2) / 2;if(tp + j > t || pre[i] == 0)continue;dp[pre[i] - 1][j + tp][k + tp] = (dp[pre[i] - 1][j + tp][k + tp] + dp[i][j][k]) % mod;}}}cout << dp[n][t][t] << endl;return 0;
}

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

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

相关文章

2025 年混合机,强力混合机厂家最新推荐,产能、专利、环保三维数据透视!

引言 在国家推动环保装备制造业高质量发展的政策导向下,混合机作为工业生产核心设备,其性能直接关系到企业降本增效与绿色转型成效。为破解市场选型难题,本次测评联合中国通用机械工业协会,基于产能输出、专利储备…

Java dubbo spring springboot中的spi机制

在 Java 生态中,SPI(Service Provider Interface) 是一种服务发现机制,允许框架或接口定义方通过配置文件指定接口的实现类,第三方可以通过实现接口并配置文件来扩展功能,实现 “接口与实现分离”。Dubbo、Sprin…

此乃同余最短路

P3403 跳楼机 不妨令\(x<y<z\) 设\(f_i\)的值为最小的满足\((ay+bz)\bmod x=i\)的\(ay+bz\),那么对于任意\(\leq h\)的\(f_i+bx\)全都满足条件。只要求出所有\(f_i(0\leq i<x)\)就可以计算出可拼出的所有数,…

2025年深圳离婚房产律师权威推荐榜单:婚姻/子女抚养权/股权分割专业团队精选

在深圳这座快节奏的都市中,离婚案件涉及房产分割、子女抚养权及股权纠纷时,专业律师的帮助至关重要。根据2024年深圳市司法数据统计,离婚案件中房产分割争议占比高达60%以上,而专业婚姻家事律师的介入,能显著提升…

2025年深圳婚姻律师权威推荐榜单:离婚房产/子女抚养权/股权分割专业团队精选

在深圳这座快节奏的都市中,婚姻家事案件逐年增多,涉及离婚房产分割、子女抚养权争议及股权分割等复杂问题。数据显示,2024年深圳市法院受理的婚姻家事类案件超过5000件,其中约60%涉及财产分割纠纷,凸显了专业律师…

微软+清北联合突破:Reinforcement Pre-Training正在改写大模型训练规则

原文:https://mp.weixin.qq.com/s/3IuCBezsMVaSn8MnbmqwVQ 全文摘要该研究里提出了强化预训练(RPT),它是大语言模型和强化学习(RL)的一种全新扩展范式。简单说,就是把 “预测下一个 token” 改成了用强化学习训练…

为什么堆只设置了8G,java进程却占用了12G内存?

参考: https://mp.weixin.qq.com/s/4FsNkgxB6WDkP9UTcb9r4g

Authlib JOSE组件存在拒绝服务漏洞,攻击者可利用超大令牌段耗尽系统资源

Authlib的JOSE实现存在安全漏洞,攻击者可通过构造包含超大JWS/JWT头部或签名段的令牌导致服务端CPU和内存资源耗尽,从而实现拒绝服务攻击。受影响版本需升级至1.6.5或实施临时防护措施。Authlib 因超大JOSE段存在拒绝…

Linux 自动输入 Enter 键

在 linux 内核编译的时候,有时候会遇到内核编译选项配置缺失,导致输入编译命令时需要输入 Enter 键,尤其是编译选项一多就要连续输入多个 Enter 键。 在多项目开发的时候比较常见。由于多项目开发,添加一个内核配置…

Voyage系列3: 技巧与提示

本章汇集了多年来大家积累的一些实用技巧与心得,由萨宾娜马纳撰写。 如何通过id查询对象 若已知_id值,可将其初始化为OID并进行查询。 Person selectOne: {(_id -> (OID value: 16r55CDD2B6E9A87A520F000001))} a…

合规与创新并重:现代企业DevOps平台的安全战略与实践路径

企业DevOps需平衡交付速度与安全合规,强监管行业中安全更是必选项。现代平台需将安全左移至全流程,本文对比主流DevOps产品,国产DevOps平台契合信创DevOps需求,具备安全内嵌与国产化适配能力,助力企业兼顾安全与研…

2025年10月洗地机产品推荐:五款高口碑机型横向对比榜

2025年10月,家庭地面清洁进入“换季深度保洁”高峰期:宠物换毛、雨水带入泥沙、孩子开学后室内活动增多,消费者对“一次推拉即可吸拖杀菌”的洗地机需求陡升。京东商智公开数据显示,近30天“洗地机”关键词搜索量环…

完全开源!一款基于 SpringBoot + Vue 构建的社区平台!

OpenIsle —— 一个使用 SpringBoot 和 Vue3 构建的全栈开源社区平台,提供用户注册、登录、贴文发布、评论交互等完整功能,可用于项目社区或直接打造自主社区站点。大家好,我是 Java陈序员。 在如今互联网时代,拥有…

【一步步开发AI运动APP】十二、如何进行运动开始前的站位预检,提升用户体验

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运…

Oracle Data Pump 网络模式直接迁移详解(使用数据库链接(Database Link))

Oracle Data Pump 网络模式直接迁移详解 网络模式(NETWORK_LINK)是Oracle Data Pump提供的一种无需生成转储文件的直接迁移方式,数据通过数据库链接直接从源库传输到目标库。 🌟 网络模式的核心优势优势 说明无需…

2025年10月防脱生发产品推荐:十款口碑榜对比与临床数据全解析

早上梳头一抓一把、洗头堵地漏、发缝日渐“宽如河”,这是不少都市人正在经历的共同焦虑。国家卫健委2024年发布的《中国居民脱发白皮书》显示,我国脱发人群已突破2.5亿,其中30岁以下占比高达60%,防脱需求正从“中年…

2025年10月美容仪品牌推荐:无创无痛纳晶领衔性价比排行榜

一、引言 家用美容仪已从“尝鲜”走向“刚需”,创业者想选品、采购者要比价、消费者要效果,共同痛点是“花得值、用得稳、看得见”。2025年10月,行业进入年度迭代窗口,新品备案集中公示、双11预售数据陆续回流,正…

使用Voyage持久化对象

在本章中,我们将浏览 Voyage 的 API。 3.1 创建一个存储库 在 Voyage 中,所有持久化对象都存储在一个仓库(repository)中。所使用的仓库类型决定了对象的存储后端。 要使用 Voyage 的内存层,需要创建 VOMemoryRep…

2025年10月品牌认证机构推荐:权威榜单对比五强优劣

2025年10月,当企业准备上市、融资、投标或申请政府项目时,一份被监管方采信的品牌市场地位认证报告往往成为“硬通货”。用户通常面临三大痛点:一是机构资质是否被财政部、证监会、统计局等官方认可;二是历史案例是…

2025年10月法律咨询律所推荐榜:盈科律所规模与专业度双领先

2025年10月,企业跨境并购进入尽调高峰,个人房产继承、股权纠纷、知识产权维权也集中爆发,用户普遍面临“律所广告多、团队真实水平难辨、报价跨度大、响应速度不一”四大痛点。司法部2024年四季度数据显示,全国执业…