【背包型DP】装箱问题
2016-08-14 21:37
218 查看
前阵子看了几天DP,今天来练练手。(codevs)
题目描述 Description
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入描述 Input Description
一个整数v,表示箱子容量
一个整数n,表示有n个物品
接下来n个整数,分别表示这n 个物品的各自体积
输出描述 Output Description
一个整数,表示箱子剩余空间。
样例输入 Sample Input
24
6
8
3
12
7
9
7
样例输出 Sample Output
0
这算是最基础的背包型DP问题。代码也很简单,但是却能体现出动态规划思想,状态转移方程也显而易见。
这里贴个AC了的代码:
面对当前物品时,决策无非就是装进箱子中或者不装进箱子中两种。若是选择装入箱子,则是转移方程中后面写到的情况:f[j-d[i]]+d[i], 若是不装入,则还是f[j]。至于如何做出选择,由题中描述,结果使剩余空间最小,即不超过边界情况下所占空间最大,就要用到algorithm中带有的max函数来做出决策了。
题目描述 Description
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入描述 Input Description
一个整数v,表示箱子容量
一个整数n,表示有n个物品
接下来n个整数,分别表示这n 个物品的各自体积
输出描述 Output Description
一个整数,表示箱子剩余空间。
样例输入 Sample Input
24
6
8
3
12
7
9
7
样例输出 Sample Output
0
这算是最基础的背包型DP问题。代码也很简单,但是却能体现出动态规划思想,状态转移方程也显而易见。
这里贴个AC了的代码:
#include<iostream> #include<algorithm> using namespace std; int c, n,d[30],f[20000]; int main() { cin >> c >> n; for (int i = 0; i < n; i++) cin >> d[i]; for(int i=0;i<n;i++) for(int j=c;j>=d[i];j--) f[j] = max(f[j], f[j-d[i]]+d[i]); cout << c - f[c] << endl; return 0; }
面对当前物品时,决策无非就是装进箱子中或者不装进箱子中两种。若是选择装入箱子,则是转移方程中后面写到的情况:f[j-d[i]]+d[i], 若是不装入,则还是f[j]。至于如何做出选择,由题中描述,结果使剩余空间最小,即不超过边界情况下所占空间最大,就要用到algorithm中带有的max函数来做出决策了。
相关文章推荐
- DP_01背包_装箱问题
- 背包型动态规划1014装箱问题
- 装箱问题(Packing DP)
- 洛谷P1049 装箱问题(DP, 0-1背包)
- tyvj p1016 装箱问题( 简单DP 01背包)
- 背包型动态规划练习-codevs-1014装箱问题
- codevs1014 装箱问题(DP)
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)
- Tyvj P1016 装箱问题 (DP)
- codevs1014 装箱问题(DP)
- 蓝桥杯 算法训练 装箱问题 (DP)
- DP_01背包_装箱问题
- 【dp】装箱问题
- wikioi-天梯-普及一等-背包dp-1014:装箱问题
- DP_01背包_装箱问题
- 背包型动态规划 装箱问题
- luogu1049 【2001普及】装箱问题(dp)
- 【日常学习】【背包DP】codevs1014 装箱问题题解
- “装箱”问题的贪婪法解决算法
- “装箱”问题的贪婪法解决算法