https://www.acmicpc.net/problem/11053
간단한 lis문제입니다.
N이 1부터 1000까지 이므로 N^2으로 접근하였습니다.
i번째 수가 j번째 수보다 크고 dp[j]+1이 dp[i]보다 크면 dp[i]을 업데이트 합니다.
dp에는 i번째 수보다 작은 수의 갯수가 저장되어 있으므로 최댓값에 +1한 값을 출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <iostream> #include <algorithm> using namespace std; int list[1001], dp[1001], N, ans; void input() { cin >> N; for (int i = 1; i <= N; i++) { cin >> list[i]; } } void func() { for (int i = 1; i <= N; i++) { for (int j = 1; j < i; j++) { if (list[j] < list[i] && dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; } } ans = max(ans, dp[i]); } cout << ans + 1 << '\n'; } int main() { cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false); input(); func(); return 0; } | cs |
'algorithm > dp' 카테고리의 다른 글
boj 12101 1, 2, 3 더하기 2 (0) | 2021.01.22 |
---|---|
boj 9095 1, 2, 3 더하기 (0) | 2021.01.22 |
boj 14226 이모티콘 (0) | 2021.01.22 |
boj 17070 파이프 옮기기 1 (0) | 2021.01.22 |
boj 1463 1로 만들기 (0) | 2021.01.22 |