题解 | #放苹果#

放苹果

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)

全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
3
1
分享
牛客网
牛客企业服务