子序列专题

最长递增子序列 LIS

用动态规划做。

Favorite Color Stripe (30)

Link

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <string.h>
#include <vector>
using namespace std;
int n,m,l,x,num,maxv;
int f[210],a[10010],dp[10010];
int main() {
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i){
		scanf("%d",&x);
		f[x]=i;
	}
	scanf("%d",&l);
	for(int i=1;i<=l;++i){
		scanf("%d",&x);
		if(f[x]) a[++num]=f[x];
	}
	for(int i=1;i<=num;++i){
		dp[i]=1; //对于每个元素,只有自己的话长度就是1
		for(int j=1;j<i;++j)
			if(a[j]<=a[i])
				dp[i]=max(dp[i],dp[j]+1);
		maxv=max(maxv,dp[i]);
	}
	printf("%d\n",maxv);
	return 0;
}

最大公共子序列

Blog Link

posted @ 2022-06-25 10:28  Ryomk  阅读(21)  评论(0编辑  收藏  举报