您的位置:首页 > 汽车 > 新车 > 班服定制网站_云南网约车有哪些平台_真正永久免费的建站系统有哪些_网络营销的现状和发展趋势

班服定制网站_云南网约车有哪些平台_真正永久免费的建站系统有哪些_网络营销的现状和发展趋势

2024/12/29 1:54:16 来源:https://blog.csdn.net/qwertf123/article/details/144776840  浏览:    关键词:班服定制网站_云南网约车有哪些平台_真正永久免费的建站系统有哪些_网络营销的现状和发展趋势
班服定制网站_云南网约车有哪些平台_真正永久免费的建站系统有哪些_网络营销的现状和发展趋势

目录

题目描述

输入格式:

输出格式:

输入样例:

输出样例:

解题思路:

 详细代码:


题目描述

给出 1~n 的两个排列 P1 和 P2,求它们的最长公共子序列。

n 在 5~1000 之间。

输入格式:

第一行是一个数 n

接下来两行,每行为 n 个数,为自然数 1~n 的一个排列(1~n 的排列每行的数据都是 1~n 之间的数,但顺序可能不同,比如 1~5 的排列可以是:1 2 3 4 5,也可以是 2 5 4 3 1)。

输出格式:

一个整数,即最长公共子序列的长度。
数据范围

对于 25% 的数据 n≤10

对于 50% 的数据 n≤500

对于 75% 的数据 n≤800
对于 100% 的数据 n≤1000

输入样例:

5 
3 2 1 4 5
1 2 3 4 5

输出样例:

3

解题思路:

本题为线性动态规划

存在两种情况

1、如果当前匹配的元素相等,则长度加一

2、如果不相等,两个元素必定有一个可以去除

详细代码:

#include <iostream>
using namespace std;
const int N=1010;
int n,m;
int sz1[N],sz2[N];
int dp[N][N];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>sz1[i];}for(int i=1;i<=n;i++){cin>>sz2[i];}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){dp[i][j]=max(dp[i-1][j],dp[i][j-1]);    //不同,认定为从缺少这两种元素的前一种情况而来if(sz1[i]==sz2[j])dp[i][j]=dp[i-1][j-1]+1;	//相同长度加一}}cout<<dp[n][n];
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com