끄적끄적 코딩
article thumbnail

다이나믹 프로그래밍 문제입니다.

피보나치에서 조금 응용된 형태입니다.
0 = 1
1 = 1
2 = 2
3 = 4
위와 같은 기본 값을 미리 입력하고

DP[i] = DP[i - 1] + DP[i - 2] + DP[i - 3] + DP[i - 4];

다음과 같은 방식으로 문제를 해결하였습니다.

#include <iostream>
#include <cstring>
using namespace std;

long long int DP[10010];

int main(int argc, char *argv[]){
	int ts;
	int checkPoint = 3;

	cin >> ts;

	memset(DP, 0, sizeof(DP));

	DP[0] = 1;
	DP[1] = 1;
	DP[2] = 2;
	DP[3] = 4;

	while (ts--) {
		int n;

		cin >> n;

		if(DP[n]){
			cout << DP[n] << endl;
			continue;
		}

		for (int i = checkPoint + 1; i <= n; ++i) {
			DP[i] = DP[i - 1] + DP[i - 2] + DP[i - 3] + DP[i - 4];
		}
		cout << DP[n] << endl;
		checkPoint = n;
	}

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 5557번 1학년  (0) 2019.07.15
[C++] 백준 10164번 격자상의 경로  (0) 2019.07.13
[C++] 백준 10942번 팰린드롬?  (0) 2019.07.10
[C++] 백준 2011번 암호코드  (0) 2019.07.10
[C++] 백준 1904번 01타일  (0) 2019.07.10

검색 태그