본문으로 바로가기
문제

www.acmicpc.net/problem/1965

 

1965번: 상자넣기

정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가

www.acmicpc.net

소스코드
#include <bits/stdc++.h>
using namespace std;
int arr[1001];
int dp[1001];
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int n,ans=0;
	cin >> n;
	for (int i = 0; i < n; i++) cin >> arr[i];
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < i; j++) {
			if (arr[i]>arr[j]) {
				dp[i] = max(dp[i], dp[j] + 1);
				ans = max(dp[i], ans);
			}
		}
	}
	cout << ans + 1;
}
 
풀이

DP에는 여러가지 유형이 있는데, 이 유형은 LIS 유형의 문제입니다.

LIS에 대한 기본지식만 있으면 쉽게 해결가능한 문제입니다.