처음에 ans = max(ans ... 부분을 for문을 안 돌리고 idx = 0 에서 시작하면 가장 큰 경우를 구할 수 있을 줄 알았다. 
하지만 idx >  0 에서 시작해서 더 큰 값을 구하는 경우가 존재한다. 

ex )
8 1 2 3 4 5 6 7 8 9 
idx = 0 부터하면 2
idx = 1 부터하면 9

#include <iostream>
#include <algorithm>
#include <cstring>
#include <limits.h>
#include <stack>
using namespace std;
int stb[10001]; // single table
int scache[100001]; // single cache
int tb[1001][1001];
int cache[1001][1001];
int n;
int go(int idx) {
       
       if (scache[idx] != -1) {
              return scache[idx];
       }
       int& ret = scache[idx] = 1;
       for (int i = idx+1; i < n; ++i) {
              if (stb[idx] < stb[i]) {
                     ret = max(ret,go(i) + 1);
              }
       }
       return ret;
}
int main(void) {
       memset(scache, -1, sizeof(scache));
       cin >> n;
       for (int i = 0; i < n; ++i) {
              cin >> stb[i];
       }
       int ans = 0;
       for (int i = 0; i < n; ++i) {
              ans = max(ans, go(i));
       }
       
       cout << ans;
       return 0;
}


'알고리즘' 카테고리의 다른 글

[DP] 백준 1309 동물원  (0) 2018.04.29
[DP] 백준 2225 합분해 (개수가 주어진 문제)  (0) 2018.04.29
[DP] 백준 9084 동전  (0) 2018.04.29
[EAZY] 백준 15624 피보나치 7  (0) 2018.04.02
[DP] 백준 11051 이항계수2  (0) 2018.04.02

+ Recent posts