递推的方式,利用公式f(m, n)=f(m, n-1)+f(m-n, n)来填表。
将m个苹果放入n个盘子里,包含了2个事件:至少有一个盘子空着的事件A,和所有盘子都不空的事件B(每个盘子都至少有一个苹果)。A∪B即所有情况。A就是求f(m, n-1),B就是f(m-n, n)。事件B表示每个盘子都有一个苹果时再放m-n个苹果,等价于每个盘子都没有苹果时放m-n个苹果,所以可以直接写成 f(m-n, n)。注意m-n可能为负数,此时要返回0。
例如,f(4,4)=f(4,3)+f(0,4),f(0,4)等于1,表示在4个盘子中各放1个苹果
while True: try: m, n = map(int, input().split()) except: break else: a = [[0 for i in range(n+1)] for j in range(m+1)] for i in range(m+1): for j in range(1,n+1): if i == 0 or i== 1 or j == 1: a[i][j] = 1 elif i-j >= 0: a[i][j] = a[i][j-1] + a[i-j][j] else: a[i][j] = a[i][j-1] print(a[m][n])