9461번: 파도반 수열
문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 �
www.acmicpc.net
간단한 dp 문제였다.
파도반 수열에는 일정한 규칙이 있는데, 이를 점화식으로 표현하면 다음과 같다.
padovan(N) = padovan(N-2) + padovan(N-3)
위 점화식을 구현하면 원하는 결과를 얻을 수 있다.
#include <iostream>
using namespace std;
long long memo[101];
long long Topdown(int N)
{
if (N == 1) return 1;
if (N == 2) return 1;
if (N == 3) return 1;
long long& ret = memo[N];
if (ret != 0) return ret;
return ret = Topdown(N - 2) + Topdown(N - 3);
}
long long Bottomup(int N)
{
memo[1] = memo[2] = memo[3] = 1;
for (int i = 4; i <= N; i++)
memo[i] = memo[i - 2] + memo[i - 3];
return memo[N];
}
int main(void)
{
int tc;
cin >> tc;
while (tc--)
{
int N;
cin >> N;
// Top-down
cout << "Top-down: " << Topdown(N) << endl;
// Bottom-up
cout << "Bottom-up: "<< Bottomup(N) << endl;
}
return 0;
}
알고리즘 200일 프로젝트 - 66 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 11052번: 카드 구매하기 (0) | 2020.06.14 |
---|---|
백준 14501번: 퇴사 (dp) (0) | 2020.06.12 |
백준 11727번: 2 x n 타일링 2 (0) | 2020.06.10 |
백준 11053번: 가장 긴 증가하는 부분 수열 (0) | 2020.06.10 |
백준 10844번: 쉬운 계단 수 (0) | 2020.06.10 |