ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

1, 2, 3 ๋”ํ•˜๊ธฐ ์‹œ๋ฆฌ์ฆˆ

 

๋ฌธ์ œ

 

16195๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ 9

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 1,000,000,009๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ์‚ฌ์šฉํ•œ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” m๊ฐœ ์ดํ•˜ ์ด์–ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์•ž์„œ ๋‹ค๋ฃฌ 1, 2, 3 ๋”ํ•˜๊ธฐ 7์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. 1, 2, 3 ๋”ํ•˜๊ธฐ 7์—์„œ๋Š” N์„ ๊ตฌํ•  ๋•Œ M ๋งŒํผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋งŒ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” M์ดํ•˜์˜ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜์—ฌ์•ผ ํ•˜๊ธฐ์— 1, 2, 3 ๋”ํ•˜๊ธฐ 7์—์„œ M์ดํ•˜์˜ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๋‹ต์•ˆ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

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(sum(dp[n][1:m + 1]) % divisor)
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€