堆箱子

这是一道关于如何堆叠箱子的问题,要求上层箱子的宽和长必须大于下层。给定箱子的宽、长、高数组以及箱子数量,目标是找到能堆出的最高高度。题目中限制了箱子数量不超过500个。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

有一堆箱子,每个箱子宽为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;
        
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值