#include <iostream> using namespace std; int main() { int lion[100001][3]={0}; int N=0;
cin >> N;
lion[1][0]=1; lion[1][1]=1; lion[1][2]=1;
for(int i=2; i<=N; i++) { lion[i][0]=(lion[i-1][0]+lion[i-1][1]+lion[i-1][2])%9901; lion[i][1]=(lion[i-1][0]+lion[i-1][2])%9901; lion[i][2]=(lion[i-1][0]+lion[i-1][1])%9901; } cout << (lion[N][0]+lion[N][1]+lion[N][2])%9901; } |
사자가 있는 방법 수를 3가지로 생각한다. -> lion[i][3] 으로 표현
i번째 우리에 사자가 있는 방법
lion[i][0] |
X |
X |
lion[i][1] |
X |
O |
lion[i][2] |
O |
X |
이에 따라 다음과 같은 점화식을 구할 수 있다.
lion[i][0]=(lion[i-1][0]+lion[i-1][1]+lion[i-1][2]);
lion[i][1]=(lion[i-1][0]+lion[i-1][2]);
lion[i][2]=(lion[i-1][0]+lion[i-1][1]);
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
171017_2011_암호코드 (0) | 2017.10.17 |
---|---|
171016_6359_만취한 상범 (0) | 2017.10.16 |
171013_1005_ACM Craft (0) | 2017.10.13 |
171012_2163_초콜릿 자르기 (0) | 2017.10.12 |
171012_11052_붕어빵 판매하기 (0) | 2017.10.12 |