首页 > 试题广场 >

组合问题

[编程题]组合问题
  • 热度指数:287 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
把m个同样的足球放进n个同样的篮子里,允许有的篮子为空,问共有几种分法?
例如:3, 2, 1和2, 1, 3是同一种分法。 

输入描述:
一行两个数字n,m(1<=n<=70,1<=m<=70)用空格隔开,表示篮子数和足球数。


输出描述:
一个整数 x 表示不同的分法数。
示例1

输入

3 7

输出

8
if __name__ == "__main__":
    nm = list(input().split(" "))
    n = int(nm[1])
    m = int(nm[0])

    dp = [[0 for i in range(m+1)] for j in range(n+1)]
    dp[0][0] = 0

    for i in range(1, m+1):
        dp[0][i] = 1

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

    print(str(dp[n][m]))

发表于 2020-02-15 22:20:00 回复(0)