【LDS】 怪盜基德的滑翔翼
阿新 • • 發佈:2020-07-28
傳送門
題意
給定一個長度為\(N\)的序列\(A\),求任意方向的最長下降子序列
資料範圍
\(1\leq t\leq 100\)
\(1\leq N\leq 100\)
題解
對於正向和逆向分別求最長上升子序列即可
Code
#include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for(int i=a;i<n;i++) #define per(i,a,n) for(int i=n-1;i>=a;i--) #define ll long long const int N=110; int n,f[N],a[N]; int _; int main(){ for(scanf("%d",&_);_;_--){ int ans=-1; memset(f,0,sizeof f); scanf("%d",&n); rep(i,1,n+1) scanf("%d",&a[i]); for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if(a[j]<a[i]) f[i]=max(f[i],f[j]+1); } ans=max(ans,f[i]); } for(int i=n;i>=1;i--){ f[i]=1; for(int j=n;j>i;j--) if(a[j]<a[i]) f[i]=max(f[i],f[j]+1); ans=max(ans,f[i]); } printf("%d\n",ans); } }