File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed
Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ https://www.acmicpc.net/problem/1562
3+ """
4+ N = int (input ())
5+ MOD = 1e9
6+ # dp[N번째 수][마지막 수][방문한 수 bitmasking(0~1023)]
7+ dp = [[[0 ]* 1024 for _ in range (10 )] for _ in range (N + 1 )]
8+
9+ for i in range (1 , 10 ):
10+ dp [1 ][i ][1 << i ] = 1
11+
12+ # n = N번째 수
13+ for n in range (2 , N + 1 ):
14+ # i = 마지막 방문 숫자가 i
15+ for i in range (10 ):
16+ # 0~9까지 모든 수를 방문해야 한다는 조건이 있으므로, 방문 여부를 bitmasking을 통해 저장해야 함.
17+ for bit in range (1024 ):
18+ if i == 0 :
19+ dp [n ][i ][bit | (1 << i )] += dp [n - 1 ][i + 1 ][bit ]
20+ elif i == 9 :
21+ dp [n ][i ][bit | (1 << i )] += dp [n - 1 ][i - 1 ][bit ]
22+ else :
23+ dp [n ][i ][bit | (1 << i )] += dp [n - 1 ][i - 1 ][bit ] + dp [n - 1 ][i + 1 ][bit ]
24+
25+ dp [n ][i ][bit | (1 << i )] %= MOD
26+
27+ res = 0
28+ for i in range (10 ):
29+ res += dp [N ][i ][2 ** 10 - 1 ]
30+
31+ print (int (res % MOD ))
You can’t perform that action at this time.
0 commit comments