Study hard
(c++)백준 9461번: 파도반 수열 본문
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 |