【算法学习】【动态规划】卖卡车问题

问题描述

在这里插入图片描述
运营一家卖卡车的公司,现已知未来n个月每月的销量用di表示。每月月初可以选择下单进货一定数量的卡车,或当月卖掉或放在仓库中囤积起来。一次下单费用为K,且无论订单中卡车数量多少。仓库的最大容量为S,其中每辆卡车每月存储在仓库中花费C。怎样使得总花销最少。

首先明确一下花销的来源:

  1. 仓库的存储费用C,每辆每月
  2. 下订单的费用K,每次(不管一次买了多少卡车都是K)

问题分析(参考答案)

现在已知每月的销量di,不如分析一下di辆卡车的来源;

  1. 当月下的订单当月卖出
  2. 以前放在仓库中囤积的,到了第i月才卖出
  3. 仓库中囤积的+当月下的订单

它们对应的花销分别为:

  1. K
  2. C×di× 月份,这里暂时未知
  3. C×di×月份+K

一目了然,由于题目特殊设置,第三种情况肯定比第一种情况花的钱多。也就是说,若是当月的库存量小于需求量,此时我不得不另外下单来满足当月需求的时候,肯定不会把仓库里的库存拿出来充需求,因为只要下单了,无论数目多少花费都是K。由此不难想到,要使总花销最少,这种情况下库存量应为0才好。
这时卡车的来源变为两类:

  1. 当月下的订单当月卖出
  2. 以前放在仓库中囤积的,到了第i月才卖出

那么与之对应的是库存量与需求量的两种情况:

  1. 库存量<需求量,当月下订单
  2. 库存量>需求量,从库存中提取需求

不妨以T[i,s]作为当月花销,其中i表示第i月,s表示此时仓库的库存量。下面针对这两种情况做出分析:

第一种情况s<di

这种情况需要当月下订单,问题又来了,购入多少呢?至少di-s辆(这种情况讨论过了,其实并不合算),合算的话也就是多于di辆,剩余的可以存起来留到以后再售出。
以a作为多出di部分的卡车数量:
T[i,s]=K+min{a*C+T[i+1,a]} (0≤a≤S)

第二种情况s≥di

T[i,s]=(s-di)*C+T[i+1,s-di]

得到递推公式。

总结

每次碰到这类问题还是容易理不清思路想复杂,遇到问题多想是好事,也能考虑到各种各样的情况。但是在动态规划问题中,其实只要考虑问题的子结构,找出能解决问题最优的那一个就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值