堆箱子
来源:互联网 发布:淘宝上手游充值赚钱不 编辑:程序博客网 时间:2024/05/20 21:20
题目描述
有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须大于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。
给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。
测试样例:
[1,1,1],[1,1,1],[1,1,1]
返回:1
class Box {public: int getHeight(vector<int> w, vector<int> l, vector<int> h, int n) { // write code here //参考了别人的代码 //类似于求一个数组的最大升序子序列,但是本题目中箱子的顺序(在满足约束条件的情况下)可以任意摆放 //因此,为了求出能堆成的最大高度,应先按照w或者l对箱子排序,保持箱子放置的相对顺序是最优的 if(n<=0) return 0; if(n==1) return h[0]; //按照w进行由大到小排序 for(int i=1;i<w.size();i++) { for(int j=0;j<w.size()-i;j++) { if(w[j]>w[j+1]) { swap(w[j],w[j+1]); swap(l[j],l[j+1]); swap(h[j],h[j+1]); } } } vector<int> height(n,0); //height[i]表示最后一个放第i+1个箱子时所能堆出的最大高度 height[0]=h[0]; int maxheight=h[0]; for(int i=1;i<n;i++) { height[i]=h[i]; for(int j=i-1;j>=0;j--) { if(w[i]>w[j]&&l[i]>l[j]) { height[i]=max(height[i],h[i]+height[j]); } } maxheight=max(maxheight,height[i]); } return maxheight; }};
0 0
- 堆箱子
- 堆箱子
- 堆箱子
- 堆箱子
- FZU 1506 堆箱子
- BOX 堆箱子
- 猴子 堆箱子
- 堆箱子问题
- 堆箱子问题
- 数据结构与算法实验题 11.1 堆箱子问题
- 程序员面试金典——堆箱子____
- 实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和
- CareerCup 递归与动态规划 Q9.10 最大高度堆箱子
- 9.9递归和动态规划(十)——堆箱子
- 箱子排序
- 推箱子
- 推箱子
- 推箱子
- hdu2039三角形
- Android RecyclerView.Adapter的写法123
- Access注入点高级运用总结
- 序列随机化
- 223. Rectangle Area
- 堆箱子
- js异步加载
- JVM——内存管理和垃圾回收
- hadoop的数据仓库--Hive初识入门
- Codeforces Round #336 (Div. 2) D 区间dp
- 解决Android Stuio 的Gradle sync failed: Gradle DSL method not found: 'android()'
- linux-lnmp
- 第二天
- TOM猫部分代码