商品装箱问题

顾客海淘时,所购买的商品需要交给转运公司来运回国内。顾客的多个商品(假设商品都是长方体,不同的商品的长宽高可能各不相同) ,转运公司要用快递盒打包运输,但转运公司只有一种类型的快递盒,快递盒的长、宽、高都已经给定,且依据海关规定,经过海关时,若每个快递盒内所含物品的总价值不超过2000元时,可以免关税,否则要收关税。请问,转运公司收到顾客的商品之后,在希望不缴纳关税的条件下,如何用快递盒打包这些商品,需要的盒子是最少的,最少需要几个?(假设快递盒子和商品的长宽高都是int型整数)

package javatest;

import java.util.ArrayList;
import java.util.Scanner;

public class GoodsTest
{
    public static int MaxValue = 2000;//一个盒子的最大免税价值
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        BoxTemplate box = new BoxTemplate();
        box.length = sc.nextInt();
        box.height = sc.nextInt();
        box.width = sc.nextInt();
        box.price = MaxValue;
        int itemNum = sc.nextInt();

        Model[] items = new Model[itemNum];
        for (int i = 0; i < itemNum; i++)
        {
            Model item = new Model();
            item.length = sc.nextInt();
            item.height = sc.nextInt();
            item.width = sc.nextInt();
            item.price = sc.nextInt();
            items[i] = item;
        }
        System.out.println("最少需要盒子个数:"+calcBoxMin(box, items));
    }

    public static int calcBoxMin(BoxTemplate box, Model[] items)
    {
        int boxMin = 0;
        int[] isBoxed = new int[items.length];
        for (int i = 0; i < items.length; i++)
        {
            if(isBoxed[i]==0)
            {
                ArrayList<Model> boxedItems=new ArrayList<Model>();
                boxedItems.add(items[i]);
                isBoxed[i]=1;
                if(isOverflow(sum(boxedItems),box))
                        return -1;
                for(int j=i+1;j<items.length;j++)
                {
                    if(isBoxed[j]==0)
                    {
                        boxedItems.add(items[j]);
                        isBoxed[j]=1;
                        Model sumItem=sum(boxedItems);
                        if(isOverflow(sumItem,box))
                        {
                            isBoxed[j]=0;
                            boxedItems.remove(items[j]);
                        }
                    }
                }
                boxMin++;
            }
        }

        return boxMin;
    }

    public static Model sum(ArrayList<Model> items)
    {
        Model sumItem=new Model();
        for(Model item:items)
        {
            sumItem.height+=item.height;
            sumItem.width+=item.width;
            sumItem.length+=item.length;
            sumItem.price+=item.price;
        }
        return sumItem;
    }

    public static boolean isOverflow(Model sumItem,BoxTemplate box)
    {
        if(sumItem.height>box.height)
            return true;
        if(sumItem.length>box.length)
            return true;
        if(sumItem.width>box.width)
            return true;
        if(sumItem.price>box.price)
            return true;
        return false;
    }
}

//包装盒
class BoxTemplate
{
    int height;
    int width;
    int length;
    int price;
}
//商品
class Model
{
    int height;
    int width;
    int length;
    int price;
}
时间: 2024-10-07 15:07:54

商品装箱问题的相关文章

三维装箱问题Java代码的简单实现过程

时间:2016年7月 作者:竹林春雨 QQ:6996899 (一) 前言 勤勤恳恳地码农了很多年,也没少在CSDN上下东西,一直没有贡献过什么,突然略感愧疚.恰好最近领导指派设计一款类似库房管理的软件,其中涉及到零售商库房商品打包出库的部分,刚好碰到商品装箱问题.将思路和大家分享,如有不妥,望及时指正,可联系QQ或者直接留言. (二) 背景及业务叙述 顾客下完订单以后,零售商库房将商品打包出库:库房工作人员将订单所购买的商品装到零售商所提供的不同型号的箱子中,打包寄送给顾客. 顾客下的订单中包含

Python爬虫库Scrapy入门1--爬取当当网商品数据

1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy  注意这个库的运行需要pywin32的支持,因此还需要安装pywin32.可以在这个网站上选择合适的版本下载安装:https://sourceforge.net/projects/pywin32/files/pywin32/ 3.挖掘当当网商品数据: 首先需要创建一个名为dangdang的爬虫项目,在pow

Freemarker商品详情页静态化服务调用处理

--------------------------------------------------------------------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53151462 作者:朱培      ID:sdksdk0 ----------------------------------------------------

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车   

ectouch手机商城首页调用指定分类下的商品

ECTouch是国内市面上唯一开源的ECSHOP移动商城系统,为广大电商以最低的成本快速搭建移动商城.最近最一商城实例,手机版首页需要调用指定分类下的商品,ECtouch商城默认好像没有此调用方式,只能自己动手添加了. 方法如下: 1.打开mobile\include\apps\default\model\IndexModel.class.php 在最下面 } 之前添加以下代码 /**      * 获得指定分类下的商品      */      function assign_cat_good

简单爬取京东百万商品的缺货记录

申明:转载请注明作者(by ChenReason)及出处,谢谢. 最近在学python,首先就想找个小功能来试着实现以下当作练手,最后决定就以爬取京东商品的缺货记录作为目标. 要爬京东数据,当然要从分析京东的商品页面开始. 我们先以京东的手机频道为例. 不然发现,有个[仅显示有货]按钮,因此不然得出这样一个思路,遍历所有商品后,[不显示只有有货 - 只显示有货=缺货商品]. 在利用python的urllib2库以及BeautifulSoup库对页面进行解析之后,会发现不管是打开只显示有货商品页面

java web 程序---购物车选商品,购买,付款

虚函数使用的时机 为什么虚函数不总是适用? 1. 虚函数有事会带来很大的消耗: 2. 虚函数不总是提供所需的行为: 3. 当我们不考虑继承当前类时,不必使用虚函数. 必须使用虚函数的情况: 1. 当你想删除一个表面上指向基类对象,实际却是指向派生类对象的指针,就需要虚析构函数. java web 程序---购物车选商品,购买,付款,布布扣,bubuko.com

在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问

有同学在群里提问,如何使用axure制作商品数量增加减少效果,见GIF图.虽然属于初级教程,但很多同学还是小白新手阶段,所以特地录制了详细的视频讲解,供大家学习参考! 该教程由原型库网站录制http://www.yuanxingku.com转载请注明出处! 在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问,布布扣,bubuko.com

用JAVA制作一个爬取商品信息的爬虫(爬取大众点评)

很多企业要求利用爬虫去爬取商品信息,一般的开发模型如下: for i=1;i<=最大页号;i++ 列表页面url=商品列表页面url+?page=i(页号) 列表页面=爬取(列表页面url) 商品链接列表=抽取商品链接(列表页面)  for 链接 in 商品链接列表: 商品页面=爬取(链接) 抽取(商品页面); 这样的模型看似简单,但是有一下几个问题: 1)爬虫没有线程池支持. 2)没有断点机制. 3)没有爬取状态存储,爬取商品网站经常会出现服务器拒绝链接(反问次数过多),导致一旦出现 拒绝链接