[lnsyoj346B/luoguCF346B] Lucky Common Subsequence

题意

给出字符串 \(a,b,v\),求满足是 \(a,b\) 公共子序列且不包含子串 \(v\) 的最长可能的字符串

sol

由于需要输出方案,因此可以直接将字符串作为 dp 结果,比较时比较长度即可。
\(f_{i,j,k}\) 表示枚举到 \(a_i,b_j\) 且匹配到 \(v_k\) 的方案数,那么在可以匹配时需要进行字符串匹配,来判断最终可以匹配到的位置,这一部分需要使用 KMP 解决。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>using namespace std;const int N = 105;string a, b, v;
int n, m, vv;
string f[N][N][N];
int ne[N];void strmax(string &A, string &B) {if (A.size() < B.size()) A = B;
}int main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> a >> b >> v;n = a.size(), m = b.size(), vv = v.size();a = ' ' + a, b = ' ' + b, v = ' ' + v;int k = 0;for (int i = 2; i <= vv; i ++ ) {while (k > 0 && v[i] != v[k + 1]) k = ne[k];if (v[i] == v[k + 1]) k ++ ;ne[i] = k;}for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {for (int k = 0; k < vv; k ++ ) {strmax(f[i][j][k], f[i - 1][j][k]);strmax(f[i][j][k], f[i][j - 1][k]);if (a[i] == b[j]) {int l = k;while (l > 0 && a[i] != v[l + 1]) l = ne[l];if (a[i] == v[l + 1]) l ++ ;string tt = f[i - 1][j - 1][k] + a[i];strmax(f[i][j][l], tt);}}}}string ans = "";for (int i = 0; i < vv; i ++ ) strmax(ans, f[n][m][i]);if (ans.size() == 0) puts("0");else cout << ans << '\n';}

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

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

相关文章

来吃糖

先放犯错后 be like:1 return // 倍增求 lca int bfs(int x) {queue<int> q;q.push(x);dep[x] = 1;while (q.size()) {x = q.front(), q.pop();for (auto it : G[x]) {int y = it.first, z = it.second;if (dep[y]) continue;dep[y] = dep[x] + 1;d[0][y] = z;f[0][y] =…

P9330 [JOISC 2023] JOI 国的节日 2 题解

Description 对于以下问题:给定长度为 \(n\) 的序列 \(a\)、\(b\),满足以下条件:在序列 \(a\) 与序列 \(b\) 中,\(1\) 到 \(2n\) 的整数各出现恰好一次; 对于 \(1\leq i\leq n\),\(a_i<b_i\); 对于 \(1\leq i<n\),\(a_i<a_{i+1}\)。求:最多能在 \([a_i,b_i]\…

一站式合同自动化:飞书审批与腾讯电子签的完美融合

Z国际教育中心专注于将全球顶尖教育资源引入中国,通过本地化整合与优化,将这些优质资源转化为中国青年触手可及的学习机会。我们的使命是帮助学生培养深厚的家国情怀与开阔的国际视野,助力他们成长为未来社会的栋梁之才。 遇到的问题 1. 业务种类多,合同审批繁琐 通过飞书平…

Linux下Docker及Nvidia Container ToolKit安装教程

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 我们接下来在Ubuntu中安装Docker(安装详见:Get Docker | Docker Docs)及NVIDIA Container Toolkit(安装详见:Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.17.3 documentat…

在用 uni-app 开发钉钉小程序的时候遇到一个奇怪的问题,发送请求拿不到返回的数据

今天我一位同事说用 uni-app 新开发的钉钉小程序里发送请求拿不到返回的数据,看了下发现调试工具的“Network”栏里显示请求是发送成功的,也有返回数据,但是没触发请求的回调函数。 原本用的是 luch-request 这个库发送的请求,后来试了下 uni-app 内置的 uni.request 以及钉…

15. 进程处理

一、什么是进程进程(Process)是正在运行的程序,是操作系统进行资源分配的基本单位。程序是存储在硬盘或内存的一段二进制序列,是静态的,而进程是动态的。每个进程都由自己的地址空间、代码段、数据段以及分配给它的其它系统资源(如文件描述符、网络连接等)。 二、创建子…

我把deepseek等大模型接入了微信公众号,打造个人AI助手

我把deepseek等大模型接入了微信公众号,打造个人AI助手前言 最近deepseek大模型可是火出了圈,给国产大模型公司点赞。于是乎去deepseek试了一下效果,奈何太多人使用了,问两句来一句 “服务器繁忙,请稍后再试”,体验感实在太差了。 作为程序员,怎么能忍受?于是乎去寻找d…

(未解决)word中插入pdf图片(高清、矢量图)

(未解决)word中插入pdf图片(高清、矢量图) 1.个人诉求: pdf高清矢量格式的图片,插入至word中 2.尝试的解决方法: https://blog.csdn.net/weixin_45399376/article/details/115281547?spm=1001.2014.3001.5502。 3.具体操作步骤: 1)word——插入——对象——文件中的文…

一语总结

一语总结 真心建议把找到的一些性质和做法以文字形式写下来,当掉不过样例的时候一个一个检查其正确性。”P9169 [省选联考 2023] 过河卒“用DFS将环当作平局是错误的因为这可能只是一个不优的必胜/必败局面,正确的做法是老实建图按拓扑序跑BFS。就这个结论的错误害我虚空调题…

软考高级《系统架构设计师》知识点(二)

操作系统知识 操作系统概述操作系统定义:能有效地组织和管理系统中的各种软/硬件资源,合理地组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。 操作系统有三个重要的作用:管理计算机中运行的程序和分配各种软硬件资源; 为用户提供…

Linux驱动---LED

本文介绍了 Linux 内核中的 pinctrl 子系统和 GPIO 子系统,并通过编写 RGB 三色灯驱动程序,展示了如何在实际应用中使用这两个子系统来控制硬件设备目录一、pinctrl子系统二、GPIO子系统三、GPIO操作步骤3.1、获取GPIO描述符3.2、设置方向3.3、读写值四、编写LED驱动4.1、硬件…