【动态规划】最长上升子序列模型:怪盗基德的滑翔伞_i++

思路:求一个序列的最长上升子序列和最长下降子序列的最大值

#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.