python动态规划_爬楼梯

该博客通过Python实现动态规划算法,探讨了如何解决爬楼梯问题,包括递归和记忆化搜索两种方法。同时,还展示了一个动态规划求解股票最大收益的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# coding = UTF-8
import time

def fun(n):
    if n == 0 or n == 1:
        return n+1
    else:
     return fun(n -1) + fun(n - 2)

# [1, 2, 3, 5, 8, 13, 21]
# 上台阶的方法数
global dp,f1,f2
f1 = 1
f2 = 2
dp = [1, 2]
def Fun(n):
    global dp,f1,f2
    index = len(dp) -1
    if n <= index:
        return dp[n]

    if n-1 > index:
        f1 = Fun(n - 1)
    if n-2 > index:
        f2 = Fun(n - 2)
    # sum = dp[n - 1] + dp[n - 2]
    dp.append(f1 + f2)   
    return dp[n - 1] + dp[n - 2]


def max_array(price):
    length = len(price)
    cache = [1]
    i = 1
    while i < length:
        cache.append(0)
        j = 0
        while j < i:
            temp = price[j] + cache[i-1-j]
            if temp > cache[i]:
                cache[i] = temp
            if price[i] > cache[i]:
                cache[i] = price[i]
            j += 1
        i += 1
    return cache

def main():
    price = [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]
    cache = max_array(price)
    for i in range(10):
        print(cache[i],end=" ")
    print()
    # print(time.clock())
    sum = fun(50)
    print(sum)

    sum = Fun(100)
    print(sum)
    print(dp)


if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值