[백준] 11053번: 가장 긴 증가하는 부분 수열

728x90
728x90

https://www.acmicpc.net/problem/11053

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

 

난이도: solved.ac 실버 2

 

LIS(Longest Increasing Subsequence)문제다.

나는 DP를 이용해 풀었다.

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXLEN 1000
#define max(a,b) ((a)>(b)?(a):(b))

int main() {
	int A[MAXLEN];
	int length[MAXLEN];
	int N, i, j;
	
	scanf("%d", &N);
	for (i = 0; i < N; i++)
		scanf("%d", &A[i]);
	for (i = 0; i < N; i++) {
		length[i] = 1;
		for (j = 0; j < i; j++) {
			if (A[i] > A[j])
				length[i] = max(length[i], length[j] + 1);
		}
	}
	int max_len = 0;
	for (i = 0; i < N; i++) {
		if (length[i] > max_len)
			max_len = length[i];
	}
	printf("%d", max_len);
	return 0;
}
반응형