PAT A1045 Favorite Color Stripe (30 分)

在这里插入图片描述
DP求解最长不下降子序列

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 210;
const int maxc = 100010;

int hashTable[maxn] = {
    
    0};
int dp[maxc];

int main(){
    
    
	int n, m;
	scanf("%d%d", &n, &m);
	for(int i=1; i<=m; i++){
    
    
		int x;
		scanf("%d", &x);
		hashTable[x] = i;
	}
	
	int l;
	scanf("%d", &l);
	int num = 1, A[maxc];
	for(int i=1; i<=l; i++){
    
    
		int x;
		scanf("%d", &x);
		if(hashTable[x] > 0){
    
    
			A[num++] = hashTable[x];
		}
	}
	
	int ans = -1;
	for(int i=1; i<num; i++){
    
    
		dp[i] = 1;
		for(int j=1; j<i; j++){
    
    
			if(A[i]>=A[j] && dp[j]+1>dp[i]){
    
    
				dp[i] = dp[j] + 1;
			}
		}
		ans = max(ans,dp[i]);
	}
	printf("%d", ans);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45964844/article/details/113861658