백준/동적계획법

[백준] C++ 1003(피보나치 함수)

2zreal 2024. 7. 4. 16:30

 

#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