求调
查看原帖
求调
601142
hnoi楼主2023/3/19 12:19
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int dp[maxn],a[maxn],b[maxn],map1[maxn];
int ans=0;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		dp[i]=0;
	} 
	for(int i=1;i<=n;i++){
			cin>>a[i];
	}
	for(int i=1;i<=n;i++){
			cin>>b[i];
			map1[b[i]]=i;
	}
	for(int i=n;i>=1;i--){
		for(int j=n;j>i;j--){
			if(map1[j]>map1[i]){
				dp[i]=max(dp[i],dp[j]+1);
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(dp[i]>ans) ans=dp[i];
		cout<<dp[i]<<" "; 
	}
	cout<<endl;
	cout<<ans;
}

我用map数组存储b[i]在a数组中的位置 map数组的最长上升子序列即为a,b数组的最长公共子序列 但是样例每次都多1 不知道哪里写错了 求调整

2023/3/19 12:19
加载中...