动态规划之滚动数组

熟悉动态规划的童鞋都知道,dp的状态方程通常都是二维数组及以上。我们总将其定义为dp[N][C],例如int dp[N][C],N=10^6,C=10^6,此时空间消耗为4*N*C=4×10^12,很大可能超过比赛中题目对空间的限制。那么我们是否可以优化它呢?

拿背包问题举例,我们通常将行范围定为物品个数,每处理当前物品只需在前一个物品基础上改变,所以每一轮需要处理的数组行数只有i和i-1这两行,这样我们便可以引申出“滚动数组”,只需要不断交替dp[0][]和dp[1][]就可以处理完N个物品。

如上图,处理物品的过程

①第1个物品:0->1;第2个物品:1->2;第3个物品:2->3;第4个物品:3->4;

②第1个物品:0->1;第2个物品:1->0;第3个物品:0->1;第4个物品:1->0;

如此一来,空间复杂度便会由O(NC)优化为O(C)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值