クルトンのプログラミング教室

Pythonの使い方やPythonを使った競技プログラミングの解法などを解説しています。

Pythonで理解する蟻本「2-3 分割数」(p.66)

この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「2-3 分割数」(p.66)
のコードをPythonで書き直したものとなっています。

入力

n\,m\\M

入力例



4 3
10000


解答

MAX_N = 1000
MAX_M = 1000

# 入力
n, m = map(int,input().split())
M = int(input())

dp = [[0] * (MAX_N + 1) for _ in range(MAX_M + 1)]    # DPテーブル

dp[0][0] = 1
for i in range(1, m + 1):
    for j in range(n + 1):
        if j - i >= 0:
            dp[i][j] = (dp[i - 1][j] + dp[i][j - i]) % M
        else:
            dp[i][j] = dp[i - 1][j]
print(dp[m][n])