흥미로운 수(동적 기획)

문제 설명
우리는 하나의 수를 흥미롭다고 하는데, 단지 다음과 같다.
1.그것의 숫자는 0,1,2,3만 포함하고 이 네 개의 숫자는 적어도 한 번은 출현한 적이 있다.
2. 모든 0은 모든 1 앞에 나타나고, 모든 2는 모든 3 앞에 나타난다.
3. 가장 높은 숫자는 0이 아니다.
따라서 우리가 정의한 가장 작은 흥미로운 수는 2013이다.이외에도 4명의 흥미로운 수는 2031과 2301이다.
마침 n자리가 있는 재미있는 수의 개수를 계산해 주세요.답안이 매우 클 수 있으므로, 답안을 1000000007의 나머지로 출력하기만 하면 된다.
입력 형식
올바른 정수 n(4≤n≤1000)을 포함하여 한 줄만 입력합니다.
출력 형식
출력은 n자리의 정수 중 재미있는 수를 포함하는 개수를 1000000007의 나머지로 나누는 한 줄만 있습니다.
샘플 입력
4
샘플 출력
3
동적 계획 방법:
import java.util.*;
public class Main {
      public static void main(String[] args) {
      new Main().run();
}
public void run() {
      Scanner fin = new Scanner(System.in);
      int N = fin.nextInt();
      long[] count = new long[8];
      count[6] = 0;
      count[7] = 1;
      long mod = 1000000007;
      for (int i = 2; i <= N; ++i) {
          long[] newCount = new long[8];
          newCount[0] = (count[0] * 2 + count[1] + count[3]) % mod;
          newCount[1] = (count[1] * 2 + count[2] + count[5]) % mod;
          newCount[2] = (count[2] + count[6]) % mod;
          newCount[3] = (count[3] * 2 + count[4] + count[5]) % mod;
          newCount[4] = (count[4] + count[7]) % mod;
          newCount[5] = (count[5] * 2 + count[6] + count[7]) % mod;
          newCount[6] = 0;
          newCount[7] = 1;
          count = newCount;
      }
     System.out.println(count[0]);
   }
}

좋은 웹페이지 즐겨찾기