HW. Apple put

Here Insert Picture Description

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

Guess you like

Origin blog.csdn.net/dpengwang/article/details/93187578