#문제
1309번: 동물원
첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.
www.acmicpc.net
#풀이 & 학습한 내용
x가 빈공간, o가 사자가 있는공간이라 할 때, 한 줄에서 가능한 경우는 xx, ox, xo이다. 그리고 이 각각의 경우에 대해 optimization을 살펴본다. dp[i][0]을 i번째 줄이 xx일 때, 총 경우의 수, dp[i][1]을 i번째 줄이 ox일 때, 총 경우의 수, dp[i][2]을 i번째 줄이 xo일 때, 총 경우의 수라 하자. 이때 코드의 13~15행에 해당하는 optimal substructure를 통해 for문으로 dp배열을 채워나간다.
#소스코드
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include<iostream>
#include<algorithm>
using namespace std;
long long dp[100002][3];
int main(void) {
int N;
cin >> N;
dp[1][0] = 1; dp[1][1] = 1; dp[1][2] = 1;
for (int i = 2; i <= N; i++) {
dp[i][0] = (dp[i - 1][0] + dp[i - 1][1] + dp[i - 1][2]) % 9901;
dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % 9901;
dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % 9901;
}
cout << (dp[N][0] + dp[N][1] + dp[N][2]) % 9901 << '\n';
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_1309.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
| [C++] 백준 9465번 : 스티커 (S2) (0) | 2020.11.12 |
|---|---|
| [C++] 백준 11057번 : 오르막 수 (S1) (0) | 2020.11.11 |
| [C++] 백준 1149번 : RGB거리 (S1) (0) | 2020.11.11 |
| [C++] 백준 9252번 : LCS 2 (G5) (0) | 2020.11.11 |
| [C++] 백준 9251번 : LCS (G5) (0) | 2020.11.11 |