문제
어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다.

이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다.
동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다.
입력
첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.
출력
첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라.
점화식만 발견하면 됩니다.
#include<bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false),cin.tie(NULL);
#define mset(v) memset(v,0,sizeof(v));
#define rep(i,a) for(int i=0;i<a;++i)
#define REP(i,a) for(int i=1;i<=a;++i)
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef tuple<int, int, int>ti;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
int dp[100001], N;
int main() {
FAST;
cin >> N;
dp[1] = 3;
dp[2] = 7;
if (N <= 2) {
cout << dp[N];
return 0;
}
for (int i = 3; i <= N; i++) {
dp[i] = ((dp[i - 1] * 2) % 9901 + dp[i - 2] % 9901) % 9901;
}
cout << dp[N] % 9901;
}
'baekjoon' 카테고리의 다른 글
[백준] 17831 대기업 승범이네 (0) | 2023.04.19 |
---|---|
[백준] 13398 연속합 2 (0) | 2023.04.19 |
[백준] 2629 양팔 저울 (0) | 2023.04.19 |
[백준] 10164 격자상의 경로 (0) | 2023.04.17 |
[백준] 11060 점프 점프 (0) | 2023.04.17 |