动态规划_python

动态规划题目特点

1.计数

      有多少种方式走到右下角,

      有多少种方式选出n个数使得其和为m

2.求最值

      利润最大化,最长升序序列

3.存在性(是否)

      取石子游戏,选手是否必胜

      能不能选出n个数使得其和为m

动态规划一般解题思路:

1.穷举法/暴力搜索法

2.记忆化搜索

3.通过对规律的总结写为迭代形式

动态规划原理:
通过避免重复节点的计算,来加速整个计算过程。

由于用到了字典或哈希表来1保存计算的中间结果,因此也称之为记忆化搜索。

动态规划---以空间换时间。

例题:

找出 nums = [1,3,2,7,6,2] 的最长递增子序列

穷举法/暴力法:

def func(nums,i):
    if i == len(nums) - 1:  #从数组最后一个元素开始的最长子列数只能是其自身(最后一个元素),即 1 
        return 1
    max_len = 1
    for j in range(i+1,len(nums)):
        if nums[j] > nums[i]: #后者比前者大,说明这是一个递增数列
            max_len = max(max_len,func(nums,j)+1)
    return max_len
def length_of_lis(nums):
    return max(func(nums,i) for i in range(len(nums)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值