zoukankan      html  css  js  c++  java
  • 堆箱子

    【转】http://blog.csdn.net/shangqing1123/article/details/47661389

    /**
     * 功能:给你一堆n个箱子,箱子宽wi,高hi,深di。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。
     * 实现方法:搭出最高的一堆箱子,箱子堆的高度为每个箱子高度的总和。

     */

    两种方法:

    方法一:递归法

    [java] view plain copy
     
    1. //递归法  
    2. public static ArrayList<Box> createStackR(Box[] boxes,Box bottom){  
    3.     int maxHeight=0;  
    4.     ArrayList<Box> maxStack=null;  
    5.       
    6.     for(int i=0;i<boxes.length;i++){  
    7.         if(boxes[i].canBeAbove(bottom)){  
    8.             ArrayList<Box> newStack=createStackR(boxes,boxes[i]);  
    9.             int newHeight=stackHeight(newStack);  
    10.               
    11.             if(newHeight>maxHeight){  
    12.                 maxHeight=newHeight;  
    13.                 maxStack=newStack;  
    14.             }  
    15.         }  
    16.     }  
    17.       
    18.     if(maxStack==null)  
    19.         maxStack=new ArrayList<Box>();  
    20.       
    21.     if(bottom!=null)  
    22.         maxStack.add(0,bottom);  
    23.       
    24.     return maxStack;  
    25. }  
    26.   
    27. public static int stackHeight(ArrayList<Box> stack){  
    28.     int height=0;         
    29.     for(int i=0;i<stack.size();i++){  
    30.         height+=stack.get(i).heigth;  
    31.     }         
    32.     return height;  
    33. }  



    方法二:动态规划

    [java] view plain copy
     
    1. //动态规划  
    2. public static ArrayList<Box> createStackDP(Box[] boxes,Box bottem,HashMap<Box,ArrayList<Box>> stackMap){  
    3.     if(bottem!=null&&stackMap.containsKey(bottem))  
    4.         return stackMap.get(bottem);  
    5.       
    6.     int maxHeight=0;  
    7.     ArrayList<Box> maxStack=null;  
    8.       
    9.     for(int i=0;i<boxes.length;i++){  
    10.         if(boxes[i].canBeAbove(bottem)){  
    11.             ArrayList<Box> newStack=createStackDP(boxes, boxes[i], stackMap);  
    12.             int newHeight=stackHeight(newStack);  
    13.               
    14.             if(newHeight>maxHeight){  
    15.                 maxStack=newStack;  
    16.                 maxHeight=newHeight;  
    17.             }  
    18.         }  
    19.     }  
    20.       
    21.     if(maxStack==null)  
    22.         maxStack=new ArrayList<Box>();  
    23.     if(bottem!=null)  
    24.         maxStack.add(0, bottem);  
    25.     stackMap.put(bottem, maxStack);  
    26.       
    27.     /** 
    28.      * 方法clone()来自Object类,其方法签名如下:重写方法时,可以调整参数,但不得改动返回类型。 
    29.      * 因此,如果继承自Object的类重写了clone()方法,它的clone()方法仍将返回Object实例。因此必须转型返回值。 
    30.      */  
    31.       
    32.     return (ArrayList<Box>) maxStack.clone();//返回副本     
    33. }  
    34.   
    35. lt;pre name="code" class="java"><pre name="code" class="java"> public static int stackHeight(ArrayList<Box> stack){  
    36.     int height=0;         
    37.     for(int i=0;i<stack.size();i++){  
    38.         height+=stack.get(i).heigth;  
    39.     }         
    40.     return height;  
    41. }  
    
    
    
    


    箱子

    [java] view plain copy
     
      1. class Box{  
      2.     int width;  
      3.     int heigth;  
      4.     int depth;  
      5.       
      6.     public Box(int width,int heigth,int depth){  
      7.         this.width=width;  
      8.         this.heigth=heigth;  
      9.         this.depth=depth;  
      10.     }  
      11.       
      12.     public boolean canBeAbove(Box box){  
      13.         if(box.width>this.width&&box.heigth>this.heigth&&box.depth>this.depth)  
      14.             return true;      
      15.         return false;  
      16.     }  
      17. }  
  • 相关阅读:
    【例题 6-21 UVA
    【例题 6-20 UVA
    【Codeforces Round #446 (Div. 2) C】Pride
    【Codeforces Round #446 (Div. 2) B】Wrath
    【Codeforces Round #446 (Div. 2) A】Greed
    【例题 6-19 UVA
    【CF675C】Money Transfers(离散化,贪心)
    【CF659E】New Reform(图的联通,环)
    【POJ1276】Cash Machine(多重背包单调队列优化)
    【HDU3507】Print Article(斜率优化DP)
  • 原文地址:https://www.cnblogs.com/lucky-star-star/p/5220532.html
Copyright © 2011-2022 走看看