DP算法思想

求递推式方法:

Note1:    直接递推

 f(n,o)表示的是以N为长度,以O为结尾的合法字符串个数 

问题 X: 阿牛的EOF牛肉串(分类讨论)-CSDN博客

Note2:    分类讨论,递推

f(n,1,3)表示以N为长度,以第一种颜色开头,3为结尾的合法字符串数量

问题 Y: LELE的RPG难题(分类讨论,三维)-CSDN博客

简单关系:

问题 R: 超级楼梯(递推,基础DP)查表-CSDN博客

Note:         f(n)=f(n-2)+f(n-1)递归

问题 S: 一只小蜜蜂...(初始化dp)-CSDN博客

Note:          f(n)=f(n-2)+f(n-1)迭代(规模较大)

普通DP:

问题 A: 数塔(dp算法)-CSDN博客

Note:        dp[i][j]=max(dp[i+1][j],dp[i+1][j+1]);        (注意边界条件)

背包问题: 

01背包:

01背包问题 及 完全背包-CSDN博客

Note:   一维数组优化,一循环w[i] 放在物品的一侧,二循环w[i]放在物品另一侧(不放w[i]已优化)

def count_different_weights(n, weights):
    # 初始化动态规划数组,大小为总重量+1,初始值都为0
    # dp[i]表示是否可以称出重量i(1表示可以,0表示不可以)
    dp[0] = 1  # 设置重量0总是可以称出

    for weight in weights:
        # 如果可以称出重量 j - w[i],则也可以称出重量 j
        for j in range(sum_weights, weight - 1, -1):
            dp[j] |= dp[j - weight]

        # 如果可以称出重量 j,则也可以称出重量 j + w[i]
        for j in range(sum_weights - weight, -1, -1):
            dp[j + weight] |= dp[j]

    # 计算可以称出的不同重量的总数(减去重量为0的情况)
    answer = sum(dp) - 1

    return answer

完全背包:      

Note:        01背包顺序遍历

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值