游园会 - 经典 DP 套 DP

经典 DP 套 DP 问题及其多倍经验

经验 1:P4590 [TJOI2018] 游园会

经验 2:P10614 BZOJ3864 Hero meet devil

经验 3:ABC391G - Many LCS

强烈谴责 ABC 原题大赛。

题意

定义 LCS 表示 Longest Common Subsequence,即最长公共子序列。

给定字符串 \(S\),记其长度为 \(n\)。给定 \(m\),对于 \(i=0,1,2,\cdots,n\),有多少个长度为 \(m\) 的字符串 \(T\),求 LCS(S,T) 为 \(i\) 的字符串数量。

经验 1:字符集为 NOI,要求 \(T\) 串中不能出现连续的 NOI\(n\le 15,m\le 1000\)

经验 2:字符集为 ACGT\(n\le 15,m\le 1000\)

经验 3:字符集为英文小写字母。\(n\le 10,m\le 100\)

解法

考虑 LCS 问题的经典 DP 做法:设 \(f_{i,j}\) 表示字符串 \(A\) 的前 \(i\) 个字符与字符串 \(B\) 的前 \(j\) 个字符的 LCS 长度。

转移是 \(f_{i,j}=\max\{f_{i-1,j},f_{i,j-1},f_{i-1,j-1}+[A_i=B_j]\}\)

这样的转移产生了一个性质:对于确定的 \(i\)\(0\le f_{i,j}-f_{i,j-1}\le 1\),即我们可以用二进制数表示 \(f_{i}\) 的差分数组。

由于第二维最大为 \(n\),状压的复杂度是可以接受的。设 \(F_{i,s}\) 表示 \(f\) 的第一维是 \(i\)\(f_i\) 的差分数组是 \(s\) 的方案数。

转移可以枚举下一个字符,是容易的。

并且转移只与 \(s\) 和下一个字符有关,与 \(i\) 无关,所以可以直接预处理。

这样总复杂度是 \(O((n+m)2^{n}\vert\Sigma\vert)\)

心路历程

刚开始先做的是 ABC 的题,WA 掉了,不知道为什么,感觉没问题。于是改了改交到游园会上面,游园会直接 WA 飞了,找了好久没发现问题。放了一段时间后,发现是如果新填入一个 N,我不会认为这是 NOI 的一个前缀,改了就 AC 了。

当时调试的时候在 LOJ 上面下载数据,就顺便交到 LOJ 上面了,没想到 WA 30。一样的代码,为什么结果不同呢?应该是有 UB。本地测试没有问题,Ubuntu 环境下也没问题,GMOJ 上面测试发现不开 O2 没问题,开了 O2 有问题。铁定是 UB 了。但是 UB 在哪呢?

原来我把字符串数组恰好开了字符串长度,导致最后终止符号 '\0' 越界了。

那么 ABC 的题过不了想必也是这个问题了,改掉之后果然过了。

松了一口气,应该最后一道经验题很快能拿下了。改完之后发现 TLE 了。这么慢的吗?本地造了一组数据完全没压力啊。遂去 VJ 上面试图寻找别的 OJ 试一试。找到 HDU,时限 8s,洛谷仅 3s。交了一下仍然 TLE,找了一个火车头,结果 WA 了。我真是越来越懵了。

后来看了一下题解,发现我的复杂度多了一个 \(n\),可以去掉,去掉之后洛谷就过了。再交到 HDU 上面,怎么就 WA 了呢?我百思不得其解。突然想起来我使用了 cerr:在 HDU 上面标准错误流和标准输出流会混杂到一起。这就导致我 WA 了。至此所有经验题做完。

都怪 UB,一直对拍都拍不出来。

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

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

相关文章

使用miniforge代替miniconda

conda作为Python数据科学领域的常用软件,是对Python环境及相关依赖进行管理的经典工具,通常集成在anaconda或miniconda等产品中供用户日常使用。但长久以来,conda在很多场景下运行缓慢卡顿、库解析速度过慢等问题也一直被用户所诟病,且由于anaconda、miniconda本身属于商业…

AI边坡监测摄像头

AI边坡监测摄像头通常安装在易发生滑坡或崩塌的区域,通过持续拍摄周围环境。当系统捕捉到异常情况(如裂缝扩大、土壤位移等)时,它会立即进行数据分析。如果确认存在危险迹象,系统将自动触发报警,并通知相关管理人员。该设备利用深度学习算法对视频流进行实时处理,可以精…

每日练习 25.2.6

Nastia and a Hidden Permutation 题目 娜斯佳有一个长度为 \(n\) 的隐藏排列 \(p\),由从 \(1\) 到 \(n\) 的整数组成。出于某种原因,你想找出这个排列。为此,您可以给她一个整数 \(t\) \(( 1 \le t \le 2 )\),两个不同的索引 \(i\) 和 \(j\) \(( 1 \le i, j \le n ,i \neq…

2025多校冲刺省选模拟赛9

2025多校冲刺省选模拟赛9\(T1\) A. 鸬鹚 \(20pts\)部分分\(30pts\)顺次迭代,并查集优化不明显。判断矩形相交时在特判掉包含后可以直接代入四个角进行判断。点击查看代码 struct node {int x1,x2,y1,y2;node operator + (const node &another) const{return (node){min(x1…

KVM在传递虚拟机镜像到时候的错误的解决方案An auth plugin is required to determine endpoint URL

最近在玩Openstack和KVM, Openstack是用devstack安装的, 但是在用kvm创建镜像到Openstack的时候出现这个错误,An auth plugin is required to determine endpoint URL,参考 了网上所有的方案都失败了,自己最终尝试用这个方式解决了,分享给需要的朋友。 修改/opt/admin-op…

IDEA 接入 DeepSeek,太酷了!

你好,我是 Guide。前两天,我发文提到 DeepSeek 的回答推荐了我的资料 《JavaGuide 面试突击版》(PDF):DeepSeek 的这波回答我给满分!。 这篇文章简单介绍一下如何在常用的 IDE 中接入 DeepSeek,这里以 Java 开发最常用的 IDEA 为例。 目前,IDEA 中接入 DeepSeek,可以借…

社媒风控下的生存法则:云手机如何为Facebook、X(Twitter)账号安全护航

社媒风控下的生存法则:云手机如何为Facebook、X(Twitter)账号安全护航 在社交媒体平台(如Facebook、X/Twitter)风控日益严格的背景下,账号安全成为运营者的核心痛点。平台通过检测设备指纹、IP地址、SIM卡信息等参数,对批量操作、异常登录或虚拟环境进行封号限制。云手机…

还在为标准“头秃”?数字化转型秘籍来了!

数字化浪潮席卷而来,企业都想“乘风破浪”,可标准化管理这块“基石”要是没打牢,小心“翻船”哦!别担心,我们带着标准制修订信息管理系统来拯救你啦!这可不是一般的系统,它能让你的标准化工作从“石器时代”直接跃迁到“赛博朋克”!😫 标准化管理的“老大难”:你中了…

[megatron代码阅读] 2. TP和PP实现

megatron 源码阅读第二篇, 看了TP和PP的对应实现训练并行实现 TensorParallel 张量并行代码路径, 代码路径: megatron/core/tensor_parallel 主要包含Linear / VocabEmbedding / cross_entropy 三部分. Linear 参数初始化 如果是从checkpoint热启, perform_initialization需要打…

2024.2.6鲜花

初探牛顿迭代?推歌 《以恋结缘》 诚、意地の悪い神の所业か? 奇迹?縁?袂触合う不思议 花ひとひら揺れて 不意に宿ってた うなじ解いてく春风 戯れはそこそこに 恋手ほどきしてくだしゃんせ 汤気にほんのり頬染て 夜风に愿ふ …いざ!!蝶と舞ひ花となりて 衣を乱して祓いま…

megatron 2. TP和PP实现

megatron 源码阅读第二篇, 看了TP和PP的对应实现训练并行实现 TensorParallel 张量并行代码路径, 代码路径: megatron/core/tensor_parallel 主要包含Linear / VocabEmbedding / cross_entropy 三部分. Linear 参数初始化 如果是从checkpoint热启, perform_initialization需要打…

【Azure Policy】当Azure策略组中存在多个修正任务时候时的批量处理办法

问题描述 在分配一组策略中包含了很多修正任务时候,从门户上,只能选择一个修正任务执行。 如下图:是否有好的办法,执行全部的修正任务呢?问题解答 从Azure门户的设计来看,只能选择一个修正任务是设计使然。如果想批量执行全部的修正任务,需要使用PowerShell脚本来循环执…