반응형
S[n]을 사자를 배치하는 경우의 수라고 정의한다.
S[n][0] : 사자 배치를 아무것도 안하는 것
S[n][1] : 사자 배치를 왼쪽에만 하는 것
S[n][2] : 사자 배치를 오른쪽에만 하는 것
s[i][0] = s[i-1][0] + s[i-1][1] + s[i-1][2], 아무것도 배치하지 않으므로 그 전 경우에서 모든 상황에 배치가 가능하다.
s[i][1] = s[i-1][0] + s[i-1][2], s[i-1][1]은 배치할 수 없으므로 더하지 않는다.
s[i][2] = s[i-1][0] + s[i-1][1], s[i-1][2]는 배치할 수 없으므로 더하지 않는다.
위 수식에서 미루어 보았을 때 사자의 배치를 가로 또는 세로 한칸 떨어진 상황에서는 하지 못하므로 각자의 상태에 따라 추가되는 경우의 수가 다르다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <iostream>
#define ll long long
using namespace std;
ll n;
ll s[100001][3];
int main() {
cin >> n;
s[1][0] = 1;
s[1][1] = 1;
s[1][2] = 1;
for (int i = 2; i <= n; i++)
{
s[i][0] = (s[i-1][0] + s[i-1][1] + s[i-1][2]) % 9901;
s[i][1] = (s[i-1][0] + s[i-1][2]) % 9901;
s[i][2] = (s[i-1][0] + s[i-1][1]) % 9901;
}
cout << (s[n][0] + s[n][1] + s[n][2]) % 9901;
}
|
cs |
'Algorithm' 카테고리의 다른 글
(C++) - 백준(BOJ) 1748번 : 수 이어 쓰기 1 (0) | 2019.09.09 |
---|---|
(C++) - 백준(BOJ) 4153번 : 직각삼각형 (0) | 2019.09.09 |
(C++) - 백준(BOJ) 1406번 : 에디터 (3) | 2019.06.22 |
(C++) - 백준(BOJ) 11969번 : Breed Counting (0) | 2019.06.20 |
(C++) - 백준(BOJ) 17127번 : 벚꽃이 정보섬에 피어난 이유 (0) | 2019.06.18 |