BOJ::1309 동물원
https://www.acmicpc.net/problem/1309
dp문제.
n번째 우리에 대해
왼쪽에 사자를 놓는 경우, 오른쪽에 사자를 놓는 경우, 둘 다 놓지 않는경우 3가지로 나눠서 풀었다.
점화식 :
d[n][0] = d[n-1][1]+d[n-1][2];
d[n][1] = d[n-1][0]+d[n-1][2];
d[n][2] = d[n-1][0]+d[n-1][1]+d[n-1][2];
JAVA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Main{ static int n; static int d[][]=new int[100001][3]; public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n=Integer.parseInt(br.readLine()); d[1][0]=1; d[1][1]=1; d[1][2]=1; for(int i = 2 ; i <= n ;i++){ d[i][0]=(d[i-1][1]+d[i-1][2])%9901; d[i][1]=(d[i-1][0]+d[i-1][2])%9901; d[i][2]=(d[i-1][1]+d[i-1][2]+d[i-1][0])%9901; } System.out.println((d[n][0]+d[n][1]+d[n][2])%9901); } } | cs |
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> using namespace std; int n; int d[100001][3]; int main() { cin >> n; d[1][0] = 1; d[1][1] = 1; d[1][2] = 1; for (int i = 2; i <= n; i++) { d[i][0] = (d[i - 1][1] + d[i - 1][2])%9901; d[i][1] = (d[i - 1][0] + d[i - 1][2])%9901; d[i][2] = (d[i - 1][0] + d[i - 1][1] + d[i - 1][2])%9901; } cout << (d[n][0] + d[n][1] + d[n][2]) % 9901 << endl; } | cs |
'BOJ::문제풀이' 카테고리의 다른 글
1389 케빈 베이컨의 6단계 법칙 (0) | 2017.12.31 |
---|---|
1325 효율적인 해킹 (0) | 2017.12.31 |
1302 베스트 셀러 (0) | 2017.12.31 |
1260 DFS와 BFS (0) | 2017.12.31 |
1157 이상한 곱셈 (0) | 2017.12.30 |