思路:求一个序列的最长上升子序列和最长下降子序列的最大值 登录后复制 #include<iostream> using namespace std; int k; int dp1[101]; int dp2[101]; int a[101]; int main(){ cin>>k; for(int m=0;m<k;m++){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } int max1=1; int max2=1; for(int i=0;i<n;i++){ dp1[i]=dp2[i]=1; } for(int i=1;i<n;i++){ for(int j=0;j<i;j++){ if(a[j]<a[i]){ dp1[i]=max(dp1[i],dp1[j]+1); max1=max(max1,dp1[i]); }else if(a[j]>a[i]){ dp2[i]=max(dp2[i],dp2[j]+1); max2=max(max2,dp2[i]); } } } cout<<max(max1,max2)<<endl; } } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813156