当前位置: 首页 > 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…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...