#include <iostream>
using namespace std;
int DP[12];
int main(void)
{
int a=0;
cin>>a;
DP[1]=1;
DP[2]=2;
DP[3]=4;
for(int i=4; i<12; i++)
{
DP[i]=DP[i-1]+DP[i-2]+DP[i-3];
}
for(int i=0; i<a; i++)
{
int num=0;
cin>>num;
cout<<DP[num]<<endl;
}
return 0;
}
이 문제는 간단한 DP문제이다.
그림으로 설명해 보겠다.
DP[i]=DP[i-1]+DP[i-2]+DP[i-3]가 성립한다.
오른쪽에 숫자를 추가한다고 상상해 보자
DP[1]의 경우에는
1+3
DP[2]의 경우에는
1+1+2
2+2
DP[3]의 경우에는
1+1+1+1
2+1+1
1+2+1
3+1
DP[4]=1+2+4
'백준 > 동적계획법' 카테고리의 다른 글
[백준] C++ 11052(카드 구매하기) (0) | 2024.07.07 |
---|---|
[백준] C++ 2293(동전) (1) | 2024.07.07 |
[백준] C++ 11726(2×n 타일링) (0) | 2024.07.04 |
[백준] C++ 1003(피보나치 함수) (0) | 2024.07.04 |
C++ 2579번(계단 오르기) (0) | 2024.06.25 |