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 |