[BOJ] 10844 쉬운 계단수 - 동적 계획법
글 작성자: Sowhat_93
N자리 계단수에 대해
끝자리가 1 - N-1자리 계단수의 끝자리가 0,2
끝자리가 2 - N-1자리 계단수의 끝자리가 1,3
끝자리가 3 - N-1자리 계단수의 끝자리가 2,4
끝자리가 4 - N-1자리 계단수의 끝자리가 3,5
끝자리가 5 - N-1자리 계단수의 끝자리가 4,6
끝자리가 6 - N-1자리 계단수의 끝자리가 5,7
끝자리가 7 - N-1자리 계단수의 끝자리가 6,8
끝자리가 8 - N-1자리 계단수의 끝자리가 7,9
끝자리가 9 - N-1자리 계단수의 끝자리가 8
끝자리가 0 - N-1자리 계단수의 끝자리가 1
모듈러 연산은 합에대한 분배법칙이 성립함에 유의하면 쉽게 풀어낼 수 있는 문제이다.
#include <iostream>
unsigned long long LastNumberCounts[101][10];
int main()
{
int N;
std::cin >> N;
LastNumberCounts[1][0] = 0;
for (int i = 2; i < 10; ++i) LastNumberCounts[1][i] = 1;
for (int i = 2; i <= N; ++i)
{
LastNumberCounts[i][0] = LastNumberCounts[i - 1][1] % 1000000000;
LastNumberCounts[i][9] = LastNumberCounts[i - 1][8] % 1000000000;
for (int k = 1; k < 9; ++k)
LastNumberCounts[i][k] = (LastNumberCounts[i-1][k-1] + LastNumberCounts[i-1][k + 1]) % 1000000000;
}
unsigned long long Res = 0;
for (int i = 0; i <= 9; ++i)
Res = (Res + LastNumberCounts[N][i]) % 1000000000;
std::cout << Res << std::endl;
}
'알고리즘' 카테고리의 다른 글
[BOJ] 11053 가장 긴 증가하는 부분수열 - LIS (0) | 2022.01.16 |
---|---|
[BOJ] 2156 포도주 시식 - 동적 계획법 (0) | 2022.01.14 |
[BOJ] 1463 1로 만들기 - 메모이제이션 (0) | 2022.01.13 |
[BOJ] 2579 계단 오르기 - 동적계획법 (0) | 2022.01.13 |
[BOJ] 1932 정수 삼각형 - 동적 계획법 (0) | 2022.01.10 |
댓글
이 글 공유하기
다른 글
-
[BOJ] 11053 가장 긴 증가하는 부분수열 - LIS
[BOJ] 11053 가장 긴 증가하는 부분수열 - LIS
2022.01.16 -
[BOJ] 2156 포도주 시식 - 동적 계획법
[BOJ] 2156 포도주 시식 - 동적 계획법
2022.01.14 -
[BOJ] 1463 1로 만들기 - 메모이제이션
[BOJ] 1463 1로 만들기 - 메모이제이션
2022.01.13 -
[BOJ] 2579 계단 오르기 - 동적계획법
[BOJ] 2579 계단 오르기 - 동적계획법
2022.01.13