-
[백준][11053번] 가장 긴 증가하는 부분 수열Algorithm/백준 2020. 3. 24. 21:51
https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
www.acmicpc.net
풀이과정
map[N]보다 작은 값 중 가장 긴 부분배열의 길이에 +1을 해준 값과 같다.
dp[N] = dp[X] + 1으로 점화식을 세웠다.
dp[X]란 map[N]보다 작은 값이면서 가장 부분배열의 길이다.
소스코드
더보기#include <stdio.h> #include <algorithm> using namespace std; int map[1001]; int dp[1001]; int N; int solution(int n) { int answer = 1; dp[0] = 1; for (int i = 1; i < n; i++) { dp[i] = 1; int num = 0; for (int j = i - 1; j >= 0; j--) { if (map[i] > map[j]) { num = max(num, dp[j]); } } dp[i] = num + 1; if (answer < dp[i]) { answer = dp[i]; } } return answer; } int main() { scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d", &map[i]); } printf("%d\n", solution(N)); return 0; }
'Algorithm > 백준' 카테고리의 다른 글
[백준][2579번] 계단 오르기 (0) 2020.03.25 [백준][11060] 점프 점프 (0) 2020.03.24 [백준][1309번] 동물원 (0) 2020.03.23 [백준][1890번] 점프 (0) 2020.03.23 [백준][2156번] 포도주 시식 (0) 2020.03.22