while True:
try:
#递归法
apple, plate = input().split()
apple, plate = int(apple), int(plate)
def recursion(m, n):
#递归结束的标志,没有苹果(所有盘子为空)或者只有一个盘子
if m == 0 or n == 1:
return 1
# 盘子大于苹果时,等价于m个盘子放m个苹果,n-m个盘子肯定是空的(注意这里不能是大于等于,等于的话就无穷递归了)
if m < n:
return recursion(m, m)
else:
#苹果大于盘子时,要么盘子有空闲,要么没有
return recursion(m-n, n) + recursion(m, n-1)
print(recursion(apple,plate))
except:
break
while True:
try:
#动态规划
apple, plate = input().split()
apple, plate = int(apple), int(plate)
dp = [[0]*(apple+1) for _ in range(plate+1)]
# dp[i][j]表示i个盘子j个苹果有多少中摆放的方法
for i in range(1, len(dp)):
for j in range(len(dp[0])):
if i == 1 or j ==0:
dp[i][j] =1
else:
#一定要注意这里是大于, 如果不是大于那么就是自己等于自己了
if i > j:
dp[i][j] = dp[j][j]
else:
dp[i][j] = dp[i-1][j] + dp[i][j-i]
for line in dp:
print(line)
print(dp[-1][-1])
except:
break
HW. Apple put
Guess you like
Origin blog.csdn.net/dpengwang/article/details/93187578
Recommended
Ranking