Study hard

(c++)백준 9461번: 파도반 수열 본문

백준/DP

(c++)백준 9461번: 파도반 수열

Nimgnoej 2020. 6. 10. 16:08

https://www.acmicpc.net/problem/9461

 

9461번: 파도반 수열

문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 �

www.acmicpc.net

※점화식※

x = 0~4까지 초기화 해준다.

P[0] = 0

P[1] = 1

P[2] = 1

P[3] = 1

P[4] = 2

 

(x≥5) P[x] = P[x-1] + P[x-1-4]

* x= 6~8까지는 P[x-1-4] 가 아니라 P[1] ~ P[3] 순으로 더하지만 모두 1로 같으므로 위의 식을 쓸 수 있음

 

#include <iostream>
using namespace std;

int T;
int N;
long long P[101];
int cnt = 4;//어디까지 구했는지 알려줌

void DP() {
	P[0] = 0;
	P[1] = 1;
	if (N > 1) {
		P[2] = 1;
		P[3] = 1;
		P[4] = 2;
	}
	//이미 구한 값이라면
	if (N <= cnt) {
		cout << P[N] << endl;
		return;
	}
	for (int i = cnt + 1; i <= N; i++) {
		P[i] = P[i - 1] + P[i - 1 - 4];
	}
	cnt = N;
	cout << P[N] << endl;
}

int main() {
	cin >> T;
	while (T--) {
		cin >> N;
		DP();
	}
	return 0;
}

'백준 > DP' 카테고리의 다른 글

(c++)백준 2011번: 암호코드  (0) 2020.06.10
(c++)백준 2225번: 합분해  (0) 2020.06.10
(c++)백준 2133번: 타일 채우기  (0) 2020.06.10
(c++)백준 1699번: 제곱수의 합  (0) 2020.06.09
(c++)백준 2579번: 계단 오르기  (0) 2020.06.09