题解 | #放苹果#

放苹果

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)

全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务