Algorithm/Problem Solving
2020. 4. 18. 22:40
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
문제 링크
- https://www.acmicpc.net/problem/11722
사용 알고리즘
- DP
풀이
- d[i] = a[i]를 가장 마지막으로 하는 가장 긴 감소하는 부분 수열의 길이
- d[i] = max(d[j]) + 1 (j < i, a[j] > a[i])
소스 코드
- https://github.com/moomini/algorithm/blob/master/boj/11722.cpp
#include <cstdio>
int d[1003];
int a[1003];
int main(void) {
int n; scanf("%d", &n);
for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
int ans = -1;
for (int i = 0; i < n; ++i) {
d[i] = 1;
for (int j = 0; j < i; ++j) {
if ((a[i] < a[j]) && (d[j] + 1 > d[i])) d[i] = d[j] + 1;
}
if (ans < d[i]) ans = d[i];
}
printf("%d\n", ans);
return 0;
}
|
'Algorithm > Problem Solving' 카테고리의 다른 글
[BOJ/1912] 연속합 (0) | 2020.04.19 |
---|---|
[BOJ/11054] 가장 긴 바이토닉 부분 수열 (0) | 2020.04.19 |
[BOJ/11055] 가장 큰 증가 부분 수열 (0) | 2020.04.18 |
[BOJ/11053] 가장 긴 증가하는 부분 수열 (0) | 2020.04.17 |
[BOJ/2156] 포도주 시식 (0) | 2020.04.17 |