ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
1, 2, 3 ๋ํ๊ธฐ ์๋ฆฌ์ฆ
- 1, 2, 3 ๋ํ๊ธฐ
- 1, 2, 3 ๋ํ๊ธฐ 2
- 1, 2, 3 ๋ํ๊ธฐ 3
- 1, 2, 3 ๋ํ๊ธฐ 4
- 1, 2, 3 ๋ํ๊ธฐ 5
- 1, 2, 3 ๋ํ๊ธฐ 6
- 1, 2, 3 ๋ํ๊ธฐ 7
- 1, 2, 3 ๋ํ๊ธฐ 8
- 1, 2, 3 ๋ํ๊ธฐ 9
๋ฌธ์
๋ฌธ์ ํ์ด
N์ด๋ผ๋ ์๋ฅผ 1, 2, 3์ด๋ผ๋ ์ซ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ๋, M๊ฐ์ ์ซ์๋ฅผ ์ฌ์ฉํ์ฌ์ ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๊ตฌํ๊ณ ์ ํ๋ ์ N๊ณผ ์ฌ์ฉํ์ฌ์ผ ํ๋ ์ซ์ M์ด ์์ผ๋ฏ๋ก 2์ฐจ์ ๋ฐฐ์ด์ธ `dp[๊ตฌํ๊ณ ์ ํ๋ ์][์ฌ์ฉํ ์]`๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ฉด์ ๊ตฌํ ์ ์๋ค.
- N์ด 1์ธ ๊ฒฝ์ฐ
- 1๋ง ์ฌ์ฉํ์ฌ ๋ํ๋ผ ์ ์๋ค.
- N์ด 2์ธ ๊ฒฝ์ฐ
- ํ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 2
- ๋๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 1 + 1
- N์ด 3์ธ ๊ฒฝ์ฐ
- ํ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 3
- ๋ ๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 1 + 2, 2 + 1
- ์ธ ๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 1 + 1 + 1
์ฆ, ๊ฐ ์ซ์๋ง๋ค ๋ช ๊ฐ์ ์๋ก ๋ํ๋ผ ์ ์๋์ง ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ์ ํ์ `dp[N][M] = dp[N - 1][M - 1] + dp[N - 2][M - 1] + dp[N - 3][M - 1]`์ ์ด๋์ด ๋ผ ์ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
MAX = 1001
divisor = 1000000009
dp = [[0] * MAX for _ in range(MAX)]
# 1์ ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ
dp[1][1] = 1
# 2๋ฅผ ๋ํ๋ผ ์ ์๋ ๊ฒจ์ฐ
dp[2][1] = 1
dp[2][2] = 1
# 3์ ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ
dp[3][1] = 1
dp[3][2] = 2
dp[3][3] = 1
for i in range(4, MAX):
# ์ฌ์ฉํ ์ ์๋ ์๋ ํ์ฌ์์ ํฌ๊ธฐ ๋งํผ์ด๋ค.
# ์๋ฅผ ๋ค์ด 5์ ๊ฒฝ์ฐ ์ซ์ 6๊ฐ๋ก ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
for j in range(1, i + 1):
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 2][j - 1] + dp[i - 3][j - 1]) % divisor
t = int(stdin.readline())
for _ in range(t):
n, m = map(int, stdin.readline().split())
print(dp[n][m])
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16195 1, 2, 3 ๋ํ๊ธฐ 9 (0) | 2020.09.30 |
---|---|
๋ฐฑ์ค: 15993 1, 2, 3 ๋ํ๊ธฐ 8 (0) | 2020.09.30 |
๋ฐฑ์ค: 15991 1, 2, 3 ๋ํ๊ธฐ 6 (0) | 2020.09.29 |
๋ฐฑ์ค: 15990 1, 2, 3 ๋ํ๊ธฐ 5 (0) | 2020.09.29 |
๋ฐฑ์ค: 15989 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2020.09.28 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ