dp——P1049 装箱问题(滚动数组)

一、 题目描述

1、题目描述

  • 有一个箱子容量为V(正整数,0≤V≤20000),同时有nn个物品(0<n≤30,每个物品有一个体积,正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

2、输入格式

1个整数,表示箱子容量。
1个整数,表示有n个物品。
接下来n行,分别表示这n个物品的各自体积。

3、输出格式

1个整数,表示箱子剩余空间。

4、输入输出样例

样例输入

24
6
8
3
12
7
9
7

样例输出

0

二、解题思路

这一道题是一个明显的01背包 ,如果把这个箱子的体积当作重量,把这个箱子的体积当作价值的话,这道题的意思就是求解当总体积不超过m的书当中,体积(价值)最大的就是最优解,很显然,这是一道多阶段决策最优化问题。

1、数学建模

令dpi,j代表前i个货物,假如用背包容量为j的背包来装最多能装多少价值(体积)。

2、状态转移方程

dpi,j=max(dpi-1,j,dpi-1,j-w[i]+v[i])

具体的原因,就不用再讲了吧……

3、边界(初始化)

dpi,0=dp0,j=0;
如果是全局变量就不用单独赋值了。

三、空间优化(滚动数组)

因为前面讲的太简单了,所以来讲稍微难一点点的,其实也不难

1、想法

这个想法是从列表开始的……

样例输入

8
6
1 
3
4
5
6
10

样例输出

0

根据样例列表格

dp数组 1 2 3 4 5 6 7 8
1 0 0 0 0 0 6 6 6
2 1 1 1 1 1 6 7 7
3 1 1 3 4 4 6 7 7
4 1 1 3 4 5 6 7 8
5 1 1 3 4 5 6 7 8
6 1 1 3 4 5 6 7 8

ans=m-dp6,8=8-dp6,8=0

2、思考

我们考虑dp4,5,它的取值和dp3,5和dp3,1有关,根据状态转移方程可以很开的得出,dp4,5=dp3,1+4=5,我们会发现,dpi,j的取值只与第i-1行有关,依此类体。第1行与第0行有关,第2行与第1行有关,第3行与第2行有关……所以我们会发现想要得到取值,只需要两行就满足了。

3、结论

dp数组 1 2 3 …… k-1 k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值