문제 : 최대 증가 부분 수열 (난이도 下)
코드
int n;
int cache[101], S[100];
int makeLIS(int start)
{
int& ret = cache[start + 1];
if (ret != -1) return ret;
ret = 1; //최소길이 1
for (int next = start+1; next < n; next++)
{
if (start == -1 || S[start] < S[next])
{
ret = max(ret, makeLIS(next) + 1);
}
}
return ret;
}
int main()
{
int C;
cin >> C;
while (C--)
{
memset(cache, -1, sizeof(cache));
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> S[i];
}
int ans = makeLIS(-1) - 1;
cout << ans << '\n';
}
return 0;
}
'알고리즘 > 알고리즘 문제 해결 전략' 카테고리의 다른 글
동적 계획법 - 6. 원주율 외우기 (0) | 2020.12.30 |
---|---|
동적 계획법 - 5. 합친 LIS (0) | 2020.12.29 |
동적 계획법 - 3. 삼각형 위의 최대 경로 (0) | 2020.12.24 |
동적 계획법 - 2. 와일드카드 (0) | 2020.12.08 |
동적 계획법 - 1. 외발 뛰기 (0) | 2020.12.07 |