#include <iostream>
using namespace std;
int DP[41][2];
int main(void)
{
int a=0;
cin>>a;
DP[0][0]=1;
DP[0][1]=0;
DP[1][0]=0;
DP[1][1]=1;
for(int i=2; i<=40; i++)
{
DP[i][0]=DP[i-1][0]+DP[i-2][0];
DP[i][1]=DP[i-1][1]+DP[i-2][1];
}
for(int i=0; i<a; i++)
{
int num=0;
cin>>num;
cout<<DP[num][0]<<" "<<DP[num][1]<<endl;
}
return 0;
}
이 문제는 F(i)를 실행시켰을 때 F(0)과 F(1)이 실행되는 횟수를 구하는 문제이다.
그림으로 설명하겠다.
느낌이 오는가??
F(4)를 실행시켰을 때 F(0)과 F(1)이 실행되는 횟수는 (F(3)의 횟수 + F(2)의 횟수)이다.
즉
DP[i][0]=DP[i-1][0]+DP[i-2][0];
DP[i][1]=DP[i-1][1]+DP[i-2][1];
'백준 > 동적계획법' 카테고리의 다른 글
[백준] C++ 11052(카드 구매하기) (0) | 2024.07.07 |
---|---|
[백준] C++ 2293(동전) (1) | 2024.07.07 |
[백준] C++ 11726(2×n 타일링) (0) | 2024.07.04 |
[백준] C++ 9095(1,2,3 더하기) (0) | 2024.07.04 |
C++ 2579번(계단 오르기) (0) | 2024.06.25 |