首页 > 其他分享 >CodeStar2023年春第12周周赛普及进阶组

CodeStar2023年春第12周周赛普及进阶组

时间:2023-06-19 21:56:04浏览次数:35  
标签:chmin 12 CodeStar2023 进阶 int rep sim using dp

T1:Sequence Matching

本题难度中等,序列匹配问题,一般都可以考虑用类似公共子序列的DP方法。本题正是如此,考虑数组 \(a\) 的前缀和数组 \(b\) 的前缀匹配时,\(x+y\) 的最小值,推出状态转移即可

dp[i][j] 表示将 \(a_1 \sim a_i\) 与 \(b_1 \sim b_j\) 中删掉 \(x\) 个后不同位置个数为 \(y\),\(x+y\) 的最小值

最后的答案为 \(dp[n][m]\)

状态转移:

  • 删 \(a_i\):\(a_1 \sim a_{i-1}\) 与 \(b_1 \sim b_j\) 匹配
    \(dp[i-1][j]+1\)
  • 删 \(b_j\):\(a_1 \sim a_i\) 与 \(b_1 \sim b_{j-1}\) 匹配
    \(dp[i][j-1]+1\)
  • \(a_i = b_j\) 时都不删,\(a_1 \sim a_{i-1}\) 与 \(b_1 \sim b_{j-1}\) 匹配
    然后在后面续上 \(a_i\) 和 \(b_j\)
    \(dp[i-1][j-1]\)
  • \(a_i \neq b_j\) 也都不删
    \(dp[i-1][j-1]+1\)

初值:

  • \(dp[0][0] = 0\)
  • \(dp[0][j] = j\)
  • \(dp[i][0] = i\)
  • 其他 \(dp = \infty\)
代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using std::cin;
using std::cout;
using std::vector;
using std::min;

const int INF = 1001001001;

template<typename T>
void chmin(T& a, const T& b) { a = min(a, b); }

int main() {
	int n, m;
	cin >> n >> m;
	vector<int> a(n), b(m);
	rep(i, n) cin >> a[i];
	rep(i, m) cin >> b[i];
	
	vector<vector<int>> dp(n + 1, vector<int>(m + 1, INF));
	dp[0][0] = 0;
	rep(i, n + 1)rep(j, m + 1) {
		if (i < n) chmin(dp[i + 1][j], dp[i][j] + 1);
		if (j < m) chmin(dp[i][j + 1], dp[i][j] + 1);
		if (i < n && j < m) {
			int co = 0;
			if (a[i] != b[j]) co = 1;
			chmin(dp[i + 1][j + 1], dp[i][j] + co);
		}
	}
	
	cout << dp[n][m] << '\n';
	
	return 0;
}

标签:chmin,12,CodeStar2023,进阶,int,rep,sim,using,dp
From: https://www.cnblogs.com/Melville/p/17492307.html

相关文章

  • rust进阶手册(1)
    目录安装管理和配置工具项目管理类型字面值格式输出位置参数格式化文本命名参数类型转换浮点字面值字符类型数组元组安装不管OS是否带有rust,都应使用rustup来安装rustlinux/freebsdcurlhttps://sh.rustup.rs-sSf|shwindowshttps://www.rust-lang.org/tools/install......
  • Ruby进阶手册(1)
    目录关于Rubyrbenvrbenv是类Unix系统上Ruby编程语言的版本管理工具使用程序包管理器安装ruby安装gems卸载Ruby版本设置path安装rails关于Ruby想知道Ruby为什么会如此受欢迎吗?在粉丝眼中,Ruby是一门优美而巧妙的语言,他们还认为Ruby易于使用,能解决实际问题。想知道受到这些......
  • python进阶手册(2)
    目录语法细节函数参数默认参数传引用可变(数量)参数列表解析正则表达式仅查找第一次匹配的文本串编译后的正则表达式对象多重匹配函数参数位置参数关键字参数可变(数量)关键字参数函数作为函数的参数函数工厂匿名函数正则表达式语法细节编码声明Python脚本第一或第二行的注释匹......
  • 【React工作记录一百一十四】前端小知识点扫盲笔记记录12
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结手写instanceOf~<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge&......
  • RT-THREAD的SFUD驱动简介基于W25Q128
    SFUD简介SFUD是一款开源的串行SPIFlash通用驱动库。详细介绍可查看官方说明,作为一个通用的中间套件,帮用户屏蔽了底层的FLASH操作,也方便用户使用不同的FLASH时进行移植。只需要配置好SPI就可以完成驱动的移植。FLASH特点FLASH写的时候,只能从1写到0,而不能从0写到1。因此写之......
  • 前端如何防止用户使用F12看控制台
    先分享一下自己的搭的免费的chatGPT网站https://www.hangyejingling.cn/正文1、如果是VUE框架开发,在生产环境中。在入口文件APP.vue中添加如下代码,其他框架同理if(process.env.mode==='production'){ (functionnoDebugger(){ functiontestDebugger(){ vard=......
  • 1262. 可被三整除的最大和
    给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。classSolution{publicintmaxSumDivThree(in......
  • Oracle 12c CC安装部署攻略 (上)
    之前统一管理非生产数据库的Oracle11gGC(GridCo)环境所用虚机被破坏了,导致无法访问,干脆安装CC(CloudControl)新环境,现在Oracle提供了12cCC和13cCC两个大版本的安装介质,可以从如下链接找到对应版本,http://www.oracle.com/technetwork/oem/enterprise-manager/downloads/index......
  • Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)
    前言Android开发学习过程中要掌握好基础知识,特别是java语言的应用,然后逐步提升开发者在学习过程中遇到的一些细致化的问题,把一些难点进行解决,在开发过程中把容易出现的一些难点进行合理化控制,避免在程序生成产品后出现问题,从而导致崩溃,这是非常重要的一点。架构师筑基必备技能作为......
  • 即时通讯技术文集(第17期):社交软件红包技术专题 [共12篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第17 期。[- 1 -] 社交软件红包技术解密(一):全面解密QQ红包技术方案——架构、技术实现等[链接] http://www.52im.net/thread-2202-1-1.html[摘要] 本文将从架构开始,到手机QQ移动......