题解 | #放苹果#
放苹果
http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
当第一个盘子中的放 0 个苹果时,则需要计算苹果数为 m,盘子数为 n-1 的情况下有多少种放法。显然需要使用递归逻辑。
既然 (1,5,1)和(1,1,5)算作相同的结果,则可以设置这样的约束:
假设盘子为 p1, p2, p3 则每个盘中上的苹果数目存在约束 p1 <= p2 <= p3
循环第一个盘子中可能存在的苹果个数,后面盘子中的苹果如何放置则进入递归,直至仅剩一个盘子为止,这时仅有一种放置方案,然后将结果向上层抛出即可。
items = input().split()
def func(j, m, n): # j 为第一个盘子最少需要放置的苹果个数
if n == 1:
return 1
r = 0
for i in range(j, m // n + 1):
r += func(i, m-i, n-1)
return r
r = func(0, int(items[0]), int(items[1]))
print(r)