반응형
[알고리즘][DP][11057] 오르막 수
https://www.acmicpc.net/problem/11057
[풀이]
- 수의 길이 = n ( 1 <= n <= 1000 )
- 오르막의 첫 번호 = k
- n자리의 오르막의 갯수 = arr[n][k]
- arr[1][k] = 10;
- arr[2][k] = 2자리의 오르막 갯수
- arr[2][0] = arr[1][0] + arr[1][1] + arr[1][2] + arr[1][3] + ... + arr[1][8] + arr[1][9]
- arr[2][1] = arr[1][1] + arr[1][2] + arr[1][3] + ... + arr[1][8] + arr[1][9]
- arr[2][2] = arr[1][2] + arr[1][3] + ... + arr[1][8] + arr[1][9]
- arr[2][3] = ..
- ..
- arr[2][8] = arr[1][8] + arr[1][9]
- arr[2][9] = arr[1][9]
------------------------------------------------------------------------------------------------
arr[2][k] = arr[2][0] + ... + arr[2][9]
- result %= 10007
[코드]
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package algorithm_basic; import java.util.Scanner; public class q_11057 { public static long mod = 10007L; public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(calc(n)); } public static long calc(int n) { long[][] arr = new long[n+1][10]; for(int i=0;i<10;i++) { arr[1][i]=1; } for(int i=2;i<=n;i++) { for(int j=0;j<10;j++) { arr[i][j]=0; for(int k=j;k<10;k++) { arr[i][j] += arr[i-1][k]; } arr[i][j]%=mod; } } long result=0; for(int i=0;i<10;i++) { result += arr[n][i]; } result %= mod; return result; } } | cs |
반응형
'CS > Algorithm' 카테고리의 다른 글
[알고리즘][GCD] 재귀를 이용한 유클리드 호제법 (0) | 2018.03.25 |
---|---|
[알고리즘][DP][1912] 연속합 (0) | 2018.03.25 |
[알고리즘][DP][10844] 쉬운 단계 수 (0) | 2018.03.24 |
[알고리즘][DP][11052] 붕어빵 판매하기 (0) | 2018.03.23 |
[알고리즘][DP][9095] 1, 2, 3 더하기 (0) | 2018.03.22 |
댓글