我的思路是枚举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;
}
求助!
死亡模样