动态规划(dp)

54 篇文章 0 订阅

解释

用于处理较复杂问题,可以将一个问题分成多个子问题,再将子问题继续拆分成更小的问题,直到能够解决.
因而找到状态转移方程很重要

处理时,一般会加上记忆化,因为这么多个子问题,很可能有相同的.
但dp无法解决有环(相互依赖)的问题,一般用于解决拓扑图这样,可以由上向下递推的问题.
如果有环,可以用枚举的方法来破环,枚举环中一个点的状态,以此状态递推即可.

示例(01背包):

只需要考虑一个东西选或不选,记录下考虑了几个物品,剩余多少体积时的最优解.
其中记录考虑了几个物品时,可以用滚动数组的方式来减小空间
转移方程为dp[i]=max(dp[i],dp[i-v[j]]+val[j]).

方法

在进行dp时,常常需要用到许多方法:

状态压缩

n一般<=20.
用一个二进制数表示各个单位的状态来实现递推.

数位dp

当n为10^18级别时
只需根据题目意思确定每一位的限制,并以此从一位一位看,而非一个数一个数来判断.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值