动态规划(1)-01背包
来源:互联网 发布:htpc直播软件 编辑:程序博客网 时间:2024/05/27 21:00
问题描述
有N件物品和一个容量为V 的背包。放入第i件物品耗费的空间是C[ i ],得到
的价值是W[ i ]。求解将哪些物品装入背包可使价值总和最大。
基本思路
每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即F[i,v]表示前i件物品恰放入一个容量为v的背包可以
获得的最大价值。则其状态转移方程便是:
F[i,v] = max { F[i - 1,v],F[i - 1,v - C[ i ] ] + W[ i ] }
“这个方程表示将前i件物品放入容量为v的背包,”这个子问题,若只考虑
第i件物品的策略(放或不放),那么就可以转化为一个只和前i - 1件物品相
关的问题。如果不放第i件物品,那么问题就转化为“前i - 1件物品放入容量
为v的背包中”,价值为F[i - 1, v];如果放第i件物品,那么问题就转化为
“前i -1件物品放入剩下的容量为v - C[ i ]的背包中”,此时能获得的最大价值
就是F[i - 1, v - Ci]再加上通过放入第i件物品获得的价值W[ i ]。
c[i] 2,3,1,4,5
w[i] 3,1,2,3,4
0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 3 3 3 3 3 3 3 3 3
2 0 0 3 3 3 4 4 4 4 4 4
3 0 2 3 5 5 5 6 6 6 6 6
4 ...
5 ...
f[i-1][v]
f[i][v]=
f[i-1][v-c[i]]+w[i]
二维01背包
- for(int i = 1; i <= n; i++)
- for(j = C[i]; j <= v; j++)
- dp[i][j] = max(dp[i-1][j], dp[i-1][j-C[i]] + W[i]);
- //其中i表示物品编号 j表示总体积V
- //C[i]表示物品体积 W[i]表示物品价值
优化空间后一维01背包
- for(int i = 1; i <= n; i++)
- for(int j = v; j >= C[i]; j--)
- dp[j] = max(dp[j], dp[j-C[i]] + W[i]);
- //其中i表示物品编号 j表示总体积V
- //C[i]表示物品体积 W[i]表示物品价值
注意
如果要求恰好装满背包,那么在初始化时除了F[0]为0,其它F[1~V ]均设为-∞,
这样就可以保证最终得到的F[V ]是一种恰好装满背包的最优解。
如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将
F[0~V ]全部设为0。
这是因为初始化的F数组事实上就是在没有任何物品可以放入背包时的合法状
态。如果要求背包恰好装满,那么此时只有容量为0的背包可以在什么也不装
且价值为0的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于
未定义的状态,应该被赋值为-∞了。如果背包并非必须被装满,那么任何容
量的背包都有一个合法解“什么都不装”,这个解的价值为0,所以初始时状
态的值也就全部为0了。
- 动态规划(1)-01背包
- 动态规划 01背包
- 01背包-动态规划
- 01背包动态规划
- 01背包 动态规划
- 01背包动态规划
- 01背包 动态规划
- 动态规划01背包
- 动态规划01背包
- 动态规划01背包
- 动态规划-01背包
- 动态规划:01背包
- 动态规划 01背包
- 动态规划(1)-01背包【模板】
- (1)01背包问题____动态规划
- 动态规划-01背包(1)
- 动态规划--1基本知识点+01背包
- 动态规划--01背包问题(1)
- 第十二周项目三(3) 递归函数求两个数最大公约数
- 学习点滴(四)
- AsyncTaskLoader1
- Android Studio Wear Demo
- check whether you have multiple ContextLoader* definitions in your web.xml
- 动态规划(1)-01背包
- Linux下 config/configure/Configure、make 、make test/make check、sudo make install 的作用
- 【Java】Eclipse搭建Gradle环境
- 第十二周 用递归方法求解1*3*5*....n
- 每日一得--外网访问自己电脑服务器
- 动画笔记
- Why is the size of an empty class not zero in C++?
- 卡尔曼滤波 – Kalman Filter (通俗的解释)
- 第十二周项目4-银行系统任务3