tungggg

LIS_DynamicProgramming

Feb 12th, 2022 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int main(){
  5.     int n;
  6.     cin>>n;
  7.     int *a = new int [n+2];
  8.     a[0]=INT_MIN;
  9.     a[n+1]=INT_MAX;
  10.     for(int i=1;i<=n;i++) cin>>a[i];
  11.     int F[n+2]={0};
  12.     int vet[n+2];
  13.     vet[1]=0;
  14.     F[0]=1; F[1]=2;
  15.     for(int i=2;i<=n+1;i++){
  16.         for(int j=0;j<i;j++){
  17.             if (a[j]<a[i]){
  18.                 if(F[i]<F[j]+1){
  19.                     F[i]=F[j]+1;
  20.                     vet[i]=j;
  21.                 }
  22.             }
  23.         }
  24.     }
  25.     vector < int > res;
  26.     int start;
  27.     cout<<F[n+1]-2<<endl;
  28.     int i= vet[n+1];
  29. // truy vet tim ket qua nguoc lai
  30.     while(i >= 0){
  31.         if (i==0){
  32.             res.push_back(a[i]);
  33.             break;
  34.         }
  35.         else {
  36.             res.push_back(a[i]);
  37.             i=vet[i];
  38.         }
  39.     }
  40.     for(int i=res.size()-1;i>=0;i--){
  41.         if (res[i]!=INT_MAX  && res[i]!= INT_MIN){
  42.             cout<<res[i]<<" ";
  43.         }
  44.     }
  45.     return 0;
  46. }
Add Comment
Please, Sign In to add comment