题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
m , n = map(int,input().split())
a = [[0]*(n+1) for _ in range(m+1)]
for j in range(1,n+1):
a[1][j] = 1
a[0][j] =1
for i in range(1,m+1):
a[i][1] = 1
for i in range(2,m+1):
for j in range(2,n+1):
if i<j:
#至少存在一个空盘
a[i][j] = a[i][j-1]
else:
#至少存在一个空盘a[i][j-1]
#没有空盘 a[i-j][j]
a[i][j] = a[i][j-1]+a[i-j][j]
print(a[m][n])
"""
好多人问为啥没管 5 1 1 和 1 5 1
不用管
5 1 1 本质上是7个果放3个盘的一种场景
但是我们算7个果放3个盘是这样算的 分类讨论
1.存在一个空盘 比如 7 0 0 5 2 0
本质上是7个果放2个盘再加一个0盘 = a[i][j-1]
2.不存在一个空盘 比如5 1 1
相当于是 1 1 1 上再分配4 = 7-3个苹果 = 4个果分3个盘的情况 = a[i-j][j]
我们默认4个果3个盘是动态规划中已经到达过的节点,
所以4个果3个盘的分配中 不存在 4 0 0 和 0 4 0 两种
所以4个果分3个盘 衍生出来的不存在一个空盘的7个果放3个盘场景也就不会有 5 1 1 和 1 5 1
"""
查看13道真题和解析
