算法训练 装箱问题
2018-02-26 20:50
239 查看
算法训练 装箱问题 时间限制:1.0s 内存限制:256.0MB 问题描述
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式 第一行为一个整数,表示箱子容量;
第二行为一个整数,表示有n个物品;
接下来n行,每行一个整数表示这n个物品的各自体积。输出格式 一个整数,表示箱子剩余空间。
样例输入
24
6
8
3
12
7
9
7样例输出0
代码:
思路: 用的是01背包问题的解法,一般01背包会给你背包的体积,物品的体积和价值,要求出尽可能放满背包的同时,价值要最大!!而此题给的是求背包所剩的最小体积。我们可以这样写:将物品的体积当做价值,求价值最大,就是求放入背包的体积最大!!
之前用部分背包写写看的,也就是用贪心去写的,还得了80分!(虽然不切实际)
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式 第一行为一个整数,表示箱子容量;
第二行为一个整数,表示有n个物品;
接下来n行,每行一个整数表示这n个物品的各自体积。输出格式 一个整数,表示箱子剩余空间。
样例输入
24
6
8
3
12
7
9
7样例输出0
代码:
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<iomanip> #include<stack> #include<cmath> using namespace std; int n, capacity; int volume[500], need[200]; int cache[20010][101]; int pack(int capacity,int item) { //初始化,没有可放入的物品时 if (item==n) { return 0; } int &ret = cache[capacity][item]; if (ret!=-1) { return ret; } //不把物品放入时 ret = pack(capacity,item+1); //将物品放入时 if (capacity>=volume[item]) { ret = max(ret, pack(capacity - volume[item], item + 1) + need[item]); } return ret; } int main() { int V; cin >> V >> n; memset(cache,-1,sizeof(cache));//zd int temp; for (int i =0; i <n;i++) { cin >> temp; volume[i]=temp; need[i] = temp; } cout<<V-pack(V,0); return 0; }
思路: 用的是01背包问题的解法,一般01背包会给你背包的体积,物品的体积和价值,要求出尽可能放满背包的同时,价值要最大!!而此题给的是求背包所剩的最小体积。我们可以这样写:将物品的体积当做价值,求价值最大,就是求放入背包的体积最大!!
之前用部分背包写写看的,也就是用贪心去写的,还得了80分!(虽然不切实际)
相关文章推荐
- ALGO-21 算法训练 装箱问题
- 蓝桥杯 ALGO-21算法训练 装箱问题(动态规划,01背包)
- 算法训练 装箱问题 蓝桥杯
- 算法训练 装箱问题
- 算法训练 装箱问题
- 算法训练 装箱问题 递归动态规划
- 算法训练 装箱问题
- 算法训练 装箱问题
- 算法训练 装箱问题
- 算法训练 装箱问题
- 蓝桥网 算法训练 装箱问题
- 算法训练 装箱问题
- 算法训练 装箱问题(01背包)
- 蓝桥杯 算法训练 装箱问题 (DP)
- 算法训练 装箱问题(0-1背包)
- 算法训练 装箱问题
- 蓝桥杯 ALGO-21算法训练 装箱问题 java版
- 19:装箱问题(4.6算法之贪心)
- 算法训练 Anagrams问题
- 算法训练 Anagrams问题