josiftepe

Untitled

Nov 14th, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. const int maxn = 1e5 + 10;
  5. const int INF = 2e9 + 5;
  6. int n;
  7. int arr[maxn];
  8. int dp[maxn]; /*dp[i] znaci deka najdolgata rastecka podniza do pozicija i e ednakva na dp[i]*/
  9. int rec(int at) /**/ {
  10.     if(dp[at] != -1) {
  11.         return dp[at];
  12.     }
  13.     int ret = 0;
  14.     for(int j = at + 1; j < n; ++j) { // ideme desno vo nizata
  15.         if(arr[at] < arr[j]) {
  16.             ret = max(ret, rec(j) + 1);
  17.         }
  18.     }
  19.     return dp[at] = ret;
  20. }
  21. int main(){
  22.  
  23.     cin >> n;
  24.     for(int i = 0; i < n; ++i) {
  25.         cin >> arr[i];
  26.         dp[i] = -1;
  27.     }
  28.     int lis = 0;
  29.     for(int i = 0; i < n; ++i) {
  30.         lis = max(lis, rec(i) + 1);
  31.     }
  32.     cout << lis << endl;
  33.  
  34.     return 0;
  35. }
  36. /*
  37. [10 9 2 5 3 7 101 18]
  38.  
  39.  rec(0) -> rec(6)
  40.  rec(0) -> rec(7)
  41.  rec(1) -> rec(6)
  42.  rec(1) -> rec(7)
  43.  rec(2) -> rec(3) -> rec(5) -> rec(6)
  44.  rec(2) -> rec(3) -> rec(5) -> rec(7)
  45.  rec(2) -> rec(4) -> rec(5) -> rec(6)
  46.  rec(2) -> rec(4) -> rec(5) -> rec(7)
  47.  .
  48.  .
  49.  .
  50.  
  51.  
  52.  
  53.  */
  54.  
Advertisement
Add Comment
Please, Sign In to add comment