【过题记录】7.20
前两题一直在打模拟赛,有点忙,就没更
Red Playing Cards
算法:动态规划
其实这就是一个线段覆盖问题,只不过大线段能够包含小线段。
这就启发我们,对于每个大线段分别跑一个dp,合并在他内部的小线段。而后对于每一个大线段,再跑一个总的dp即可。
也可以只跑一遍dp,有一个小trick,在线段两端添0,这样答案就等同于f[0]
#include<bits/stdc++.h>
using namespace std;#define int long longconst int N = 6e3+100;
int n;
int f[N];
int l[N],r[N];
int a[N];struct Node{int l,r,x;
}b[N];int g[N];
int dp[N];bool cmp(Node x,Node y){int l1 = x.r-x.l+1;int l2 = y.r-y.l+1;return l1 < l2;
}signed main(){cin>>n;for (int i = 1; i <= 2*n; i++){cin>>a[i];if (l[a[i]] == 0) l[a[i]] = i;else r[a[i]] = i;}for (int i = 1; i <= n; i++)b[i] = {l[i],r[i],i};sort(b+1,b+n+1,cmp);for (int i = 1; i <= n; i++){int x = b[i].x;for (int j = 1; j <= 2*n; j++) g[j] = 0;for (int j = b[i].l; j <= b[i].r; j++){g[j] = g[j-1]+x;if (l[a[j]] < j && l[a[j]] > b[i].l)g[j] = max(g[l[a[j]]-1]+f[a[j]],g[j]);}f[x] = g[b[i].r];}for (int i = 1; i <= 2*n; i++){dp[i] = max(dp[i-1],dp[i]);if (l[a[i]] == i) continue;dp[i] = max(dp[i],dp[l[a[i]]-1]+f[a[i]]);}cout<<dp[2*n];return 0;
}
#include<bits/stdc++.h>
using namespace std;#define int long longconst int N = 6e3+100;
int n;
int f[N];
int l[N],r[N];
int a[N];struct Node{int l,r,x;
}b[N];int g[N];
int dp[N];bool cmp(Node x,Node y){int l1 = x.r-x.l+1;int l2 = y.r-y.l+1;return l1 < l2;
}signed main(){cin>>n;for (int i = 2; i <= 2*n+1; i++){cin>>a[i];if (l[a[i]] == 0) l[a[i]] = i;else r[a[i]] = i;}for (int i = 1; i <= n; i++)b[i] = {l[i],r[i],i};b[n+1] = {1,2*n+2,0}; ++n;sort(b+1,b+n+1,cmp);for (int i = 1; i <= n; i++){int x = b[i].x;for (int j = 0; j <= 2*n; j++) g[j] = 0;for (int j = b[i].l; j <= b[i].r; j++){g[j] = g[j-1]+x;if (l[a[j]] < j && l[a[j]] > b[i].l)g[j] = max(g[l[a[j]]-1]+f[a[j]],g[j]);}f[x] = g[b[i].r];}cout<<f[0];
// for (int i = 1; i <= 2*n; i++){
// dp[i] = max(dp[i-1],dp[i]);
// if (l[a[i]] == i) continue;
// dp[i] = max(dp[i],dp[l[a[i]]-1]+f[a[i]]);
// }
// cout<<dp[2*n];
// for (int i = 1; i <= n; i++) cout<<"i = "<<f[i]<<endl;return 0;
}
Lucky Common Subsequence
算法:KMPdp
这题只是一个加强版的LCS,只不过多了一个子串的限定。
所以我们不难想到状态设置:
f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示第一个串从1……i,第二个串从2……j,匹配了第三个串k个长度的最长LCS
关键就是第三维状态的转移,我们不能随便转移,而是利用KMP的NEXT数组进行转移
在第三个串的k位之后加入s[i],利用NEXT数组转移到相应的位置进行转移。
由于本题要求输出路径,有两种方法
第一种就是常规的求最长长度,而后利用状态关系倒序递归输出。
第二种就是直接用string去存储答案。
这里用的第二种方法
#include<bits/stdc++.h>
using namespace std;const int N = 1e2+10;
string f[N][N][N];
int n,m,q;
char s1[N],s2[N],s3[N];
int Ne[N];void KMP(){Ne[1] = 0;int j = 0;for (int i = 2; i <= q; i++){while (j > 0 && s3[i]!=s3[j+1]) j=Ne[j];if (s3[i] == s3[j+1]) j++;Ne[i] = j;}
}void Com(string &a,string b){if (a.size() < b.size()) a = b;
}int main(){cin>>(s1+1); cin>>(s2+1); cin>>(s3+1);n = strlen(s1+1); m = strlen(s2+1); q = strlen(s3+1);KMP();for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){for (int k = 0; k < q; k++){Com(f[i][j][k],f[i-1][j][k]);Com(f[i][j][k],f[i][j-1][k]);if (s1[i]!=s2[j]) continue;int now = k;while (now && s1[i]!=s3[now+1]) now = Ne[now];if (s1[i] == s3[now+1]) now++;Com(f[i][j][now],f[i-1][j-1][k]+s1[i]);}}}string ans = "";for (int i = 0; i < q; i++)Com(ans,f[n][m][i]);if (ans.size() == 0) cout<<0; else cout<<ans;return 0;
}
算是一个比较典的KMPdp的题目
相关文章:

【过题记录】7.20
前两题一直在打模拟赛,有点忙,就没更 Red Playing Cards 算法:动态规划 其实这就是一个线段覆盖问题,只不过大线段能够包含小线段。 这就启发我们,对于每个大线段分别跑一个dp,合并在他内部的小线段。而后…...

Linux系统学习日记——vim操作手册
Vim编辑器是linux下的一个命令行编辑器,类似于我们windows下的记事本。 目录 打开文件 编辑 保存退出 打开文件 打开 hello.c不存在也可以打开,保存时vim会自动创建。 效果 Vim打开时,处于命令模式,即执行命令的模式&#x…...
【深度学习图片】图片清洗,只留下图像中只有一张人脸的,而且人脸是全的
环境: conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia -ypip install onnx1.15 onnxruntime-gpu1.17pip install insightface0.7.3pip install opencv-pythonpip install gradio图片清洗,只留下图像中只有一张人脸…...

如何在 PostgreSQL 中处理海量数据的存储和检索?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索?一、优化表结构设计二、分区技术三、数据压…...

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.1物联网与2.2.2云计算
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...

Redis集群的主从复制原理-全量复制和增量复制-哨兵机制
Redis集群的主从复制原理-全量复制和增量复制-哨兵机制 作用 数据备份 这一点直观,因为现在有很多节点,每个节点都保存了原始数据的备份. 读写分离 这一点主要是当发生读写的时候,读数据的操作大部分都会进入到从节点,而写数据的操作都会进入到主节点&…...
23年阿里淘天笔试题 | 卡码网模拟
第一题 字典序最小的 01 字符串 解题思路: 模拟,统计遇到的连续的1的个数记为num,直到遇到0,如果k>num,直接将第一个1置为0,将遇到的0置为1,否则将第一个1偏置num-k个位置置为0࿰…...
【SpringBoot】单元测试之测试Service方法
测试Service方法 SpringBootTest public class UserServiceTest{ Autowired private UserService userService; Test public void findOne () throws Exception{ Assert.assertEquals("1002",userService.findOne()); } } 测试Controller接口方法 Runwith(S…...

剪辑师和小白都能用的AI解说神器,一键把短剧变解说视频-手把手教程-2024
为什么短剧、综艺、电影和电视剧需要以解说形式在抖音、快手和TikTok推广? 此类专业影视内容由于时间过长、平台用户的习惯、算法去重需求和版权问题,专业的影视综节目通常需要用解说类型的视频来不断重复的宣发剧集。具体的原因如下: 1. 视…...

我去,怎么http全变https了
项目场景: 在公司做的一个某地可视化项目。 部署采用的是前后端分离部署,图片等静态资源请求一台minio服务器。 项目平台用的是http 图片资源的服务器用的是https 问题描述 在以https请求图片资源时,图片请求成功报200。 【现象1】: 继图…...

IDEA的详细设置
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
为什么Spring选择使用容器来管理对象,而不是直接使用new
为什么Spring选择使用容器来管理对象,而不是直接使用new 在Java应用程序开发中,对象的创建和管理是一项基础且关键的任务。传统上,开发者习惯于使用new关键字直接在代码中实例化对象。然而,随着应用程序规模的扩大和复杂度的增加…...
腾讯云发送短信验证码
1、在腾讯云平台中 开通短信服务 2、发送短信 2.1引用jar包 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java-sms</artifactId><version>3.1.1043</version> </dependency>2.2 发送短…...

嵌入式人工智能(13-基于树莓派4B的指纹识别-AS608)
1、指纹识别模块 指纹识别是一种生物识别技术,通过分析人体指纹的纹理特征来进行身份验证。每个人的指纹纹路都是独一无二的,通过将指纹与事先存储的指纹数据库进行比对,可以确定是否为同一人。指纹识别在安全领域得到广泛应用,例…...

【Vue】`v-on` 指令详解:事件绑定与处理的全面指南
文章目录 一、v-on 指令概述缩写语法 二、v-on 的基本用法1. 绑定方法2. 内联处理器 三、v-on 指令的高级用法1. 事件修饰符.stop.prevent.capture.self.once 2. 按键修饰符.enter自定义按键修饰符 3. 系统修饰符 四、v-on 指令的实际应用1. 表单处理模板部分 (<template>…...

【Spark On Hive】—— 基于电商数据分析的项目实战
文章目录 Spark On Hive 详解一、项目配置1. 创建工程2. 配置文件3. 工程目录 二、代码实现2.1 Class SparkFactory2.2 Object SparkFactory Spark On Hive 详解 本文基于Spark重构基于Hive的电商数据分析的项目需求,在重构的同时对Spark On Hive的全流程进行详细的…...

哪种SSL证书可以快速签发保护http安全访问?
用户访问网站,经常会遇到访问http网页时,提示网站不安全或者不是私密连接的提示,因为http是使用明文传输,数据传输中可能被篡改,数据不被保护,通常需要SSL证书来给数据加密。 SSL证书的签发速度࿰…...

深入探究理解大型语言模型参数和内存需求
概述 大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解…...

maven 私服搭建(tar+docker)
maven私服搭建 一、linux安装nexus1、工具下载 二、 docker 搭建nexus1、镜像下载创建目录2、运行nexus3、访问确认,修改默认密码,禁用匿名用户登录4、创建仓库5、创建hostd仓库6、创建Blob Stores7、创建docker私服1、创建proxy仓库2、创建hotsed本地仓…...

银行业务知识全篇(财务知识、金融业务知识)
第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...