最大公共子序列

博主吐槽大学课程设置,认为某些课程无实际意义,仅是手册式的项目作业。同时分享了个人在论文写作和报告完成过程中的挑战,表达了对深入学习科学的渴望。尽管面临大物、模电等课程的压力,博主仍坚持自我学习,对六级考试采取策略性准备,并以线性动态规划为例,展示了个人在编程上的兴趣。
摘要由CSDN通过智能技术生成

其实,我已经在线性dp那里更新了这个题目
在这里重新写一遍的目的,就是我真的很想吐槽
why??
今天我真的燥死了
我想请问大学不是真正学知识的地方吗,给我搞一些乱七八糟的哈比课,完成一些没有意义的哈比作业,一个开发项目,就照着手册做,跟按照说明书安装软件一样,对我有什么帮助吗???在这里不得不感谢我的室友以及我的同学,是他们help我的作业,让我不至于天天搞这些哈比东西,我能抽出时间做我想做的东西,学习真正的,有用的,奇妙的科学。虽然只是一个刚刚入门的孩子,我也相信自己能有所收获,我希望自己以后也能成为老师们那样的人。最近写的一篇论文,现在写的part有些困难了,虽然只是一篇综述,不过写综述的过程确实比技术性文章更加煎熬吧,饱受着好像学不到什么东西的痛苦,又得不停地查资料,我这篇要独立完成的论文,估计查文献可能得看至少五六百篇,才能引用出一百多篇,加油吧!
然后我还得写报告,一共十几页哦,一点都不多哦,手不会累的哦,因为都没有知觉了哦。
还有课内,模电弄得我神经衰弱了都,天天不想看,总是推拖着明天看,明天我看吗?我还是不看。不过我一会一定要看了!大物也得复习,明天考试!无语啦!插一嘴,大物对我以后学习好像没用吧啊😭。
六级准备摆烂了,其实现在560+可能够用了?不过还得做好万无一失的准备啊,这次大概准备吧,下学期反正还要考的
就说这么多吧,打出来字还挺爽的,今晚要再看看大雾和模电吧,vpn进不去我也登不上Google scholar啊!
加油吧!🐱‍🏍(这看起来是个冲刺的什么)

题目

就最大公共字序列 自己看线性dp那篇文章!!!! 那篇我很喜欢,为啥访客量那么少 metaverse那篇到是达到了1200多,果然热门啊metaverse!

代码


/*
给定两个长度分别为 N 和 M 的字符串 A 和 B
求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。

输入格式
第一行包含两个整数 N 和 M。

第二行包含一个长度为 N 的字符串,表示字符串 A。

第三行包含一个长度为 M 的字符串,表示字符串 B。

字符串均由小写字母构成。
*/


/*

注意:这里的是公共序列,不是子串,不一定需要相邻 

一、状态表示
	
	dp[i][j]表示a的前i和b的前j个的公共序列的集合
	dp[i][j]的值是这些公共序列的最大长度
	
二、状态转移方程
	对于某个dp[i][j],我们需要进行划分
	以第a[i]和第b[j]个元素进行划分
	 
	四种情况:
	a[i]包不包含在最长公共序列中(0,1)
	b[j]包不包含在最长公共序列中(0,1)
	
	1. 00
		dp[i][j]=dp[i-1][j-1]
		
	#2和3要回顾一下网课	
	2. 01 
		dp[i-1][j]
	3. 10
		dp[i][j-1]
		
	4. 11
		满足a[i]=b[j]
		dp[i][j]=dp[i-1][j-1]+1
	
*/


#include<iostream>

using namespace std;

const int Num=2000;
int N,M;
char a[Num],b[Num];
int dp[Num][Num];

int main(){
	cin>>N>>M;
	getchar();
	for(int i=1;i<=N;i++)
		scanf("%c",&a[i]);
	getchar();
	for(int i=1;i<=M;i++)
		scanf("%c",&b[i]);	
	
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++){
			if(a[i]==b[j])
				dp[i][j]=dp[i-1][j-1]+1;
			else
				dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i][j-1]));
		}
	cout<<dp[N][M]<<endl;
	return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值