10分求助!
查看原帖
10分求助!
1208971
zsc2023楼主2024/10/7 14:09

我的思路是枚举i,求出1到i的最长上升子序列,在求出i到n的最长下降子序列

#include<bits/stdc++.h>
using namespace std;
long long dp[5005],dp2[5005],a[5005],n,ans,ans1,t=1,k;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	while(k<=n){
		t++;
		k++;
		for(int i=1;i<=k;i++){
			dp[i]=1;
			for(int j=1;j<i;j++){
				if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1);
			}
			if(dp[i]>ans) ans=dp[i];
		}
		for(int i=k;i<=n;i++){
			dp2[i]=1;
			for(int j=1;j<i;j++){
				if(a[i]<a[j]) dp2[i]=max(dp2[i],dp2[j]+1);
			}
			if(dp2[i]>ans1) ans=dp2[i];
		}
	}
	cout<<ans+ans1-1<<endl;
	return 0;
}

求助!

死亡模样

2024/10/7 14:09
加载中...