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

CF1446B Catching Cheaters 题解 DP

Catching Cheaters

传送门

题面翻译

给我们两个字符串,让我们从中选出两个字串,算出它们的最大公共子序列长度。然后将它乘 4 4 4在减去两个字串的长度。问你这个数最大是多少。

题目描述

You are given two strings A A A and B B B representing essays of two students who are suspected cheaters. For any two strings C C C , D D D we define their similarity score S ( C , D ) S(C,D) S(C,D) as 4 ⋅ L C S ( C , D ) − ∣ C ∣ − ∣ D ∣ 4\cdot LCS(C,D) - |C| - |D| 4LCS(C,D)CD , where L C S ( C , D ) LCS(C,D) LCS(C,D) denotes the length of the Longest Common Subsequence of strings C C C and D D D .

You believe that only some part of the essays could have been copied, therefore you’re interested in their substrings.

Calculate the maximal similarity score over all pairs of substrings. More formally, output maximal S ( C , D ) S(C, D) S(C,D) over all pairs ( C , D ) (C, D) (C,D) , where C C C is some substring of A A A , and $ D $ is some substring of B B B .

If X X X is a string, ∣ X ∣ |X| X denotes its length.

A string a a a is a substring of a string b b b if a a a can be obtained from b b b by deletion of several (possibly, zero or all) characters from the beginning and several (possibly, zero or all) characters from the end.

A string a a a is a subsequence of a string b b b if a a a can be obtained from b b b by deletion of several (possibly, zero or all) characters.

Pay attention to the difference between the substring and subsequence, as they both appear in the problem statement.

You may wish to read the Wikipedia page about the Longest Common Subsequence problem.

输入格式

The first line contains two positive integers n n n and m m m ( 1 ≤ n , m ≤ 5000 1 \leq n, m \leq 5000 1n,m5000 ) — lengths of the two strings A A A and B B B .

The second line contains a string consisting of n n n lowercase Latin letters — string A A A .

The third line contains a string consisting of m m m lowercase Latin letters — string B B B .

输出格式

Output maximal S ( C , D ) S(C, D) S(C,D) over all pairs ( C , D ) (C, D) (C,D) , where C C C is some substring of A A A , and D D D is some substring of B B B .

样例 #1

样例输入 #1

4 5
abba
babab

样例输出 #1

5

样例 #2

样例输入 #2

8 10
bbbbabab
bbbabaaaaa

样例输出 #2

12

样例 #3

样例输入 #3

7 7
uiibwws
qhtkxcn

样例输出 #3

0

提示

For the first case:

abb from the first string and abab from the second string have LCS equal to abb.

The result is S ( a b b , a b a b ) = ( 4 ⋅ ∣ a b b ∣ ) − ∣ a b b ∣ − ∣ a b a b ∣ = 4 ⋅ 3 − 3 − 4 = 5 S(abb, abab) = (4 \cdot |abb|) - |abb| - |abab| = 4 \cdot 3 - 3 - 4 = 5 S(abb,abab)=(4abb)abbabab=4334=5 .

以上来自洛谷 以上来自洛谷 以上来自洛谷

解题思路

首先,暴力肯定过不了。

考虑DP。设 f i , j f_{i,j} fi,j 表示以 a i , b i a_i,b_i ai,bi 为两字串的末位的相似值(相似值计算: 4 × L C S ( A , B ) − ∣ A ∣ − ∣ B ∣ 4 \times LCS(A,B)-|A|-|B| 4×LCS(A,B)AB)。当 i + 1 i+1 i+1 j + 1 j+1 j+1 时,对 L C S ( A , B ) LCS(A,B) LCS(A,B) 无贡献,而对 ∣ A ∣ |A| A ∣ B ∣ |B| B 贡献为 1 1 1,所以对相似值贡献为 ( 4 × L C S ( A ′ , B ) − ∣ A ′ ∣ − ∣ B ∣ ) − ( 4 × L C S ( ∣ A ∣ , ∣ B ∣ ) − ∣ A ∣ − ∣ B ∣ ) = ( 4 × L C S ( A , B ) − ( ∣ A ∣ + 1 ) − ∣ B ∣ ) − ( 4 × L C S ( A , B ) − ∣ A ∣ − ∣ ∣ B ) = 4 ∗ L C S ( A , B ) − ∣ A ∣ − 1 − ∣ B ∣ − 4 × L C S ( A , B ) + ∣ A ∣ + ∣ B ∣ = − 1 (4\times LCS(A',B)-|A'|-|B|)-(4\times LCS(|A|,|B|)-|A|-|B|)=(4\times LCS(A,B)-(|A|+1)-|B|)-(4\times LCS(A,B)-|A|-||B)=4*LCS(A,B)-|A|-1-|B|-4\times LCS(A,B)+|A|+|B|=-1 (4×LCS(A,B)AB)(4×LCS(A,B)AB)=(4×LCS(A,B)(A+1)B)(4×LCS(A,B)A∣∣B)=4LCS(A,B)A1B4×LCS(A,B)+A+B=1,则有 f i , j = max ⁡ ( f i , j , max ⁡ ( f i − 1 , j , f i , j − 1 ) ) f_{i,j}=\max(f_{i,j},\max(f_{i-1,j},f_{i,j-1})) fi,j=max(fi,j,max(fi1,j,fi,j1))。当 i + 1 i+1 i+1 j + 1 j+1 j+1 的同时满足 a i + 1 = b j + 1 a_{i+1}=b_{j+1} ai+1=bj+1,则对 L C S ( A , B ) LCS(A,B) LCS(A,B) 的贡献为 4 4 4,对 ∣ A ∣ + ∣ B ∣ |A|+|B| A+B 的贡献为 2 2 2,所以对相似值的贡献为 ( 4 × L C S ( A ′ , B ′ ) − ∣ A ′ ∣ − ∣ B ′ ∣ ) − ( 4 × L C S ( A , B ) − ∣ A ∣ − ∣ B ∣ ) = ( 4 × ( L C S ( A , B ) + 1 ) − ( ∣ A ∣ + 1 ) − ( ∣ B ∣ + 1 ) ) − ( 4 × L C S ( A , B ) − ∣ A ∣ − ∣ B ∣ ) = ( 4 × L C S ( A , B ) + 4 − ∣ A ∣ − 1 − ∣ B ∣ − 1 ) − ( 4 × L C S ( A , B ) − ∣ A ∣ − ∣ B ∣ ) = 4 × L C S ( A , B ) + 4 − ∣ A ∣ − 1 − ∣ B ∣ − 1 − 4 × L C S ( A , B ) + ∣ A ∣ + ∣ B ∣ = 2 (4\times LCS(A',B')-|A'|-|B'|)-(4\times LCS(A,B)-|A|-|B|)=(4\times (LCS(A,B)+1)-(|A|+1)-(|B|+1))-(4\times LCS(A,B)-|A|-|B|)=(4\times LCS(A,B)+4-|A|-1-|B|-1)-(4\times LCS(A,B)-|A|-|B|)=4\times LCS(A,B)+4-|A|-1-|B|-1-4\times LCS(A,B)+|A|+|B|=2 (4×LCS(A,B)AB)(4×LCS(A,B)AB)=(4×(LCS(A,B)+1)(A+1)(B+1))(4×LCS(A,B)AB)=(4×LCS(A,B)+4A1B1)(4×LCS(A,B)AB)=4×LCS(A,B)+4A1B14×LCS(A,B)+A+B=2,由此可得此时 f i , j = f i − 1 , j − 1 + 2 f_{i,j}=f_{i-1,j-1}+2 fi,j=fi1,j1+2

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int Maxn = 5000 + 5;
int n, m;
char s1[Maxn], s2[Maxn];
int f[Maxn][Maxn];
int ans;
inline void work() {cin >> n >> m >> s1 + 1 >> s2 + 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {f[i][j] = max(f[i][j], max(f[i][j - 1], f[i - 1][j]) - 1);if (s1[i] == s2[j]) {f[i][j] = f[i - 1][j - 1] + 2;}ans = max(ans, f[i][j]);}}cout << ans << endl;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);work();return 0;
}

还不会?看这里。

相关文章:

CF1446B Catching Cheaters 题解 DP

Catching Cheaters 传送门 题面翻译 给我们两个字符串&#xff0c;让我们从中选出两个字串&#xff0c;算出它们的最大公共子序列长度。然后将它乘 4 4 4在减去两个字串的长度。问你这个数最大是多少。 题目描述 You are given two strings A A A and B B B representin…...

用python实现文本/图片生成视频

使用Python来生成视频通常涉及到使用一些专门的库&#xff0c;比如 OpenCV 或者 moviepy。下面是一个简单的例子&#xff0c;使用OpenCV和PIL&#xff08;Python Imaging Library&#xff09;来创建一个视频。 python复制代码 import cv2 import numpy as np from PIL import …...

Android Gradle Plugin、Gradle、Android Studio版本关系

参考链接 Android Gradle Plugin 与 gradle 对应关系 插件版本所需的最低 Gradle 版本8.38.48.28.28.18.08.08.07.47.57.37.47.27.3.37.17.27.07.04.2.06.7.14.1.06.54.0.06.1.13.6.0 - 3.6.45.6.43.5.0 - 3.5.45.4.13.4.0 - 3.4.35.1.13.3.0 - 3.3.34.10.13.2.0 - 3.2.14.63…...

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战&#xff08;30&#xff09;——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…...

java 修改JsonObject对象所有的Value类型为String

将JSONObject 或者JSONArray 中所有Value 为数值类型 转为String. 转换前: [{"zjlx": 201,"xm": "刘**","cbdjxxlist": [{"zspmdm": 102031201,"rybm": "43000010300000411195","jfrlx": 1…...

Vue3-47-Pinia-修改全局状态变量值的方式

说明 修改全局状态变量的值&#xff0c;是一个比较常规而且常见的操作。 本文就介绍四种常见的操作。 由于Option Store 和Setup Store 在修改的时候略有不同&#xff0c;所以本文也会将不同点体现一下。 全局状态变量的定义 包含了 Option Store 和Setup Store 两种定义方式&a…...

【Scala】——面向对象

1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同&#xff0c;每个源文件一个包&#xff08;包 名和源文件所在路径不要求必须一致&#xff09;&#xff0c;包名用“.”进行分隔以表示包的层级关系&#xff0c;如 com.atguigu.scala。另一种风…...

【MediaFoundation】OpenCV VideoCapture 读取音频源码

OpenCV 读取音频代码实例 在windows7 以及OpenCV4 过后可以使用 CAP_MSMF 读取音频&#xff0c;但是OpenCV没有播放音频的API。代码示例如下。 本文解析OpenCVCAP_MSMF 进行文件、设备的 音频读取&#xff0c;学习MediaFoundation 的使用。 #include <opencv2/core.hpp>…...

2024秋招,百度测试开发工程师一面

前言 大家好&#xff0c;今天我来回顾一下秋招中的一场很重要技术面试 一面面试官深挖我的项目经历&#xff0c;并提出了很多的实际场景&#xff0c;我现在回顾依然有很多新的认识 过程 自我介绍实习工作中&#xff0c;做得最好的地方是什么&#xff1f; 我先介绍了一下实习…...

Git 使用与问题记录 二(公司快速上手版)

写在前面 记录自己学习的内容&#xff0c;方便后面忘记的时候查看。给像我一样的新手提供一点参考 正文 上一章已经安装好了Git&#xff0c;如何使用呢。我这里会分享两种办法&#xff0c;第一种是在VS2022中克隆代码&#xff0c;修改和提交&#xff1b;第二种是用命令提交。…...

【C语言小游戏】贪吃蛇

文章目录 1.引言2.运行图2.涉及知识3 Windows API3.1 控制台3.2 控制台屏幕坐标3.3 操作句柄3.4 控制台屏幕光标3.5 监视按键 4. 设计说明5. 完整代码 1.引言 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能&#xff1a; 贪吃蛇地图绘制蛇吃⻝物的…...

价值7500的在线授权网站源码支持IP+域名+双向授权全开源

PHP授权验证更新系统完整版&#xff0c;一键更新系统&#xff0c;一键卡密生成自助授权功能&#xff0c;域名ip双重验证功能等等 修复盗版检测&#xff0c;确保实时查看盗版 修复在线加密系统&#xff0c;一键加密 授权系统几乎所有的程序都能整合使用,包括您的app和计算机程序…...

haiku实现门控多头注意力模块

在多头注意力机制中&#xff0c;通常输入的数据包括查询&#xff08;Q&#xff09;、键&#xff08;K&#xff09;和值&#xff08;V&#xff09;。这些数据的维度以及权重矩阵的维度在多头注意力机制中扮演关键角色。下面对数据及权重的维度进行解释&#xff1a; 输入数据&…...

【React 常用的 TS 类型】持续更新

1&#xff09;定义样式的 TS 类型 【 React.CSSProperties 】 一般定义样式时需要的类型限制&#xff0c;如下&#xff1a; const customStyle: React.CSSProperties {color: blue,fontSize: 16px,margin: 10px,}; 2&#xff09;定义 Input Ref 属性时的 TS 类型限制 【 R…...

打破传统边界,VR技术与六西格玛设计理念的创新融合!

在科技飞速发展的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术以其独特的沉浸式体验&#xff0c;正在改变我们的生活和工作方式。然而&#xff0c;要让VR真正成为主流&#xff0c;我们必须解决一些关键问题&#xff0c;其中最重要的就是用户体验。六西格玛设计&…...

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果 下载地址 uni-app官方插件市场: cc-comment组件 环境 基于vue3.2和uni-ui开发; 依赖版本参考如下: "dependencies": {"dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","dcloudio/uni-ui": "^1.4.28","…...

TongLINKQ(3):TongLINKQ常用命令

启动&#xff1a; tlq 暂停&#xff1a; tlq -cabort -y -w1 查看lic信息&#xff1a; tlqstat –lic 查看队列消息&#xff1a; tlqstat -qcu qcu名 -c 查看发送连接状态&#xff1a; tlqstat -snd qcu名 -1 -ct 1 查看指定的Qcu连接状态&#xff1a; tlqsta…...

抽水马桶出水慢解决记录

今天分享一些修马桶的小心得&#xff08;雾&#xff09; 家里的马桶出水很好&#xff0c;但是水却不怎么被冲下去&#xff08;出水很慢&#xff09;&#xff0c;这会导致内容物滞留&#xff0c;造成很不好的使用体验。 出于成本考虑&#xff0c;首先选择自己维修。 首先直接…...

img标签的奇怪问题

本来只是为实现一个轮播图&#xff0c;img的url地址是从后端接口获取的&#xff0c;但不巧的是url地址的图片都过期了。 因为懒得重新到网上找图&#xff0c;就想直接用一下本地的图片&#xff0c;简单的想法遇到一堆问题。 问题一&#xff1a; 因为是springboot项目&#xf…...

深入探究Hibernate:优雅、强大的Java持久化框架

目录 1、前言 2、Hibernate简介 2.1 什么是Hibernate 2.2 为什么选择Hibernate 3、Hibernate核心概念 3.1 实体类和映射文件 3.2 数据库表和持久化类的映射 3.3 主键生成策略 3.4 持久化操作 3.5 查询语言(HQL和Criteria) 3.6 事务管理 4、Hibernate配置与连接 4…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...