fork(2) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int l[1001];
  4. int memo[1002][1002];
  5. int N;
  6.  
  7.  
  8. int lis(int n, int p)
  9. {
  10. if(memo[n][p] != -1) return memo[n][p];
  11.  
  12. if(n==N) return 0;
  13.  
  14. if(l[p] >= l[n]) return memo[n][p] = lis(n+1, n)+1;
  15.  
  16. return memo[n][p] = max(lis(n+1, n)+1, lis(n+1,p) );
  17. }
  18.  
  19.  
  20.  
  21. int main()
  22. {
  23. int T;
  24. scanf("%d",&T);
  25. while(T--)
  26. {
  27. scanf("%d",&N);
  28. memset(memo,-1,sizeof(memo));
  29. for(int i=0; i <N; i++)
  30. {
  31. scanf("%d",&l[i]);
  32. }
  33. printf("%d\n",lis(0, N));
  34. }
  35. return 0;
  36. }
  37.  
Success #stdin #stdout 0s 7396KB
stdin
1
16
0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
stdout
16