堆箱子

题目描述:

有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须大于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。

给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。

测试样例:
[1,1,1],[1,1,1],[1,1,1]

返回:1

思路:采用动态规划。先按照宽度排序,再根据长度求最长升序子序列,记录高度和。

class Box {
private:
  struct box{
        
      int weight;
      int length;
      int height;
      box(int w,int l,int h):weight(w),length(l),height(h){}
        
        };

   static bool bcmp(const box box1,const box box2){//这里一定要是静态
     return box1.weight<=box2.weight;
        
   }  
public:
    
    int getHeight(vector<int> w, vector<int> l, vector<int> h, int n) {
        // write code here   
        
        vector<box> boxes;
        
        for(int i=0;i<n;i++){
            box b(w[i],l[i],h[i]);               
            boxes.push_back(b);
        }
        
        sort(boxes.begin(),boxes.end(),bcmp);
        
        vector<int> record(n);
        
        int maxh=0;
        
        for(int i=0;i<n;i++){
            record[i]=boxes[i].height;
            //int temp=0;
          for(int j=0;j<i;j++)
          {
              //要有第一个条件 防止宽度相等的情况
              if(boxes[j].weight<boxes[i].weight&&boxes[j].length<boxes[i].length
                 &&record[j]+boxes[i].height>record[i])
                
                  record[i]=record[j]+boxes[i].height;
                 
          }   
             
              maxh=max(maxh,record[i]);
                  
          
        }
        
        return maxh;
    }
      
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值