-
[Baekjoon - 22971] 증가하는 부분 수열의 개수문제 풀이/Baekjoon Online Judge 2023. 2. 13. 20:42
난이도: Silver II
태그
더보기- Dynamic Programming
- Longest Increasing Subsequence
풀이
1. DP 세우기
더보기\( dp_{i} \) = \( i \)번째 원소를 끝으로 하는 LIS의 개수 를 정의해봅시다.
초항은 \( dp_{0} = 1 \)입니다.
점화식은 어떨까요?
\( A_{j} < A_{i} \)인 모든 \( j \)에 대해, \( [\ldots, A_j, A_i] \)의 수열을 만들 수 있으므로
\( dp_{i} = \sum\limits_{j<i \text{ and } A_j < A_i} dp_{j} \)가 됩니다.
2. 코드
더보기123456789101112131415const ll mod = 998244353;int arr[5020];ll dp[5020];void Main(){int n; cin >> n;for (int i = 1; i <= n; i++){ cin >> arr[i]; }dp[0] = 1; for (int i = 1; i <= n; i++){for (int j = 0; j < n; j++){dp[i] += (arr[j] < arr[i])*dp[j];dp[i] %= mod;}cout << dp[i] << ' ';}}cs '문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon - 24759] Slide Count (0) 2023.02.13 [Baekjoon - 18392] SHOP (0) 2023.02.13 [Baekjoon - 24413] Tic-Tac State (0) 2023.02.13 [Baekjoon - 3189] tomo (0) 2023.02.13 [Baekjoon - 18242] 네모네모 시력검사 (0) 2023.02.13 - Dynamic Programming