#include <iostream>
#include <vector>
#include <list>
#include <stack>
#include <queue>
using namespace std;
#include <thread>
#include <windows.h>
// +1 / +2 / +3 랜덤 상승
// N을 만드는 경우의 수?
// 재귀적?
//
int N;
int cache[100];
// [+num]에서 시작해서, [+N]까지 가는 경우의 수
int Enchant(int num)
{
// 기저 사례
if (num > N)
return 0;
if (num == N)
return 1;
// 캐시
int& ret = cache[num];
if (ret != -1)
return ret;
// 적용
return ret = Enchant(num + 1) + Enchant(num + 2) + Enchant(num + 3);
}
int main()
{
N = 9;
::memset(cache, -1, sizeof(cache));
}