[문제 링크]

 

1965번: 상자넣기

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

www.acmicpc.net


https://onlytrying.tistory.com/80 LIS 유형의 문제와 유사한 문제였다.


#include <iostream>
using namespace std;

int n, arr[1001], memo[1001];

int max(int a, int b) { return a > b ? a : b; }

int Topdown(int start)
{
	if (start == n) return 1;

	int& ret = memo[start];
	if (ret != 0) return ret;

	ret = 1;

	for (int i = start + 1; i <= n; i++)
		if (arr[start] < arr[i])
			ret = max(ret, Topdown(i) + 1);

	return ret;
}

int Bottomup()
{
	int res = 1;
	for (int i = 1; i <= n; i++)
	{
		memo[i] = 1;
		for (int j = 1; j < i; j++)
			if (arr[i] > arr[j])
				memo[i] = max(memo[i], memo[j] + 1);

		res = max(res, memo[i]);
	}

	return res;
}

int main(void)
{
	cin >> n;

	for (int i = 1; i <= n; i++)
		cin >> arr[i];

	// top-down
	int res = 1;
	for (int i = 1; i <= n; i++)
		res = max(res, Topdown(i));
	cout << res << endl;

	// bottom-up
	cout << Bottomup() << endl;

	return 0;
}

알고리즘 200일 프로젝트 - 92 day

'알고리즘 > BOJ' 카테고리의 다른 글

백준 11066번: 파일 합치기  (0) 2020.07.08
백준 1915번: 가장 큰 정사각형  (0) 2020.07.06
백준 6359번: 만취한 상범  (0) 2020.07.06
백준 1937번: 욕심쟁이 판다  (0) 2020.07.06
백준 1309번: 동물원  (0) 2020.07.05

+ Recent posts