NYOJ 36 最长公共子序列 (还是dp)
2024-10-20 13:30:47
这个好多算法书上都有,不仅限于《算法导论》
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描写叙述
咱们就不拐弯抹角了,如题。须要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是。一个序列 S ,假设各自是两个或多个已知序列的子序列,且是全部符合此条件序列中最长的。则 S 称为已知序列的最长公共子序列。
输入
第一行给出一个整数N(0<N<100)表示待測数据组数
接下来每组数据两行,分别为待測的两组字符串。每一个字符串长度不大于1000.
输出
每组測试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
例子输入
2
asdf
adfsd
123abc
abc123abc例子输出
3
#include<iostream>
#include<cstring>
#include <string> using namespace std; int a[1010][1010]; int max(int x, int y)
{
return x>y ? x : y;
} int main()
{
int test,i,j,k,len1,len2,lcs;
string s1,s2;
cin>>test;
while(test--)
{
cin>>s1>>s2;
len1=s1.length();
len2=s2.length();
memset(a,0,sizeof(a));
lcs=0;
for(i=1;i<len1+1;i++)
{
for(j=1;j<len2+1;j++)
{
if(s1[i-1]==s2[j-1])
a[i][j]=a[i-1][j-1]+1;
else
a[i][j]=max(a[i][j-1],a[i-1][j]);
if(a[i][j]>lcs)
lcs=a[i][j];
}
}
cout<<lcs<<endl;
}
return 0;
}
最新文章
- 图片javascript缩小
- 前后端分离工具之ftl-server
- gsoap框架下的onvif程序流程分析
- 数据结构-多级指针单链表(C语言)
- java课堂练习之可变參数与卫条件
- [Effective C++ --019]设计class犹如设计type
- [Hapi.js] Managing State with Cookies
- javascript无缝全屏轮播
- Glide的加载图片的帮助类,用来把图片圆角或者改成圆形图片
- T-SQL 创建、修改、删除数据库,表语法
- MySQL_数据分页查询(limit用法)
- Discuz3.4-SSRF-从触发点到构造payload
- 浅析Kubernetes的工作原理
- 用Ubuntu快速安装Jenkins
- git server 配置
- poj2987 求最大权闭合回路
- canvas学习之树叶动画
- 【POJ3171】Cleaning Shifts 带权区间最小覆盖
- iOS开发中id、NSObject *、id、instancetype四者有什么区别?
- Jmeter--正则表达式提取器
热门文章
- Linux下读写寄存器
- Rdis-主从复制
- ORACLE11g R2【单实例 FS→单实例FS】
- 使用Docker来运行WebApp
- 人工智能计算器AI Calculator 3.3.0 具体破解思路&;amp;教程
- jQuery的实现原理和核心
- 应用Python来计算排列中的逆序数个数
- 错误代码: 1449 The user specified as a definer (&;#39;root&;#39;@&;#39;%&;#39;) does not exist
- netty reactor线程模型分析
- Altium Designer如何移动选中的所有对象