zoukankan      html  css  js  c++  java
  • 叠罗汉III之推箱子

    有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。
    给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。

    测试样例:

    [1,1,1],[1,1,1],[1,1,1]

    返回:1

    解题

    按照上面一题的思路,还是要先排序

    排序后找到,w l的 子序列对应的 h的最大值

    import java.util.*;
    
    public class Box {
        public int getHeight(int[] w, int[] l, int[] h, int n) {
            // write code here
            // 根据 w 排序
            for(int i=n-1;i>=0;i--){
                for(int j=0;j< i;j++){
                    if(w[j] < w[j+1]){
                        swap(w,j,j+1);
                        swap(l,j,j+1);
                        swap(h,j,j+1);
                    }
                }
            }
          
            // 两个判断条件 w l 
            int[] maxH = new int[n];
        	maxH[0] = h[0];
        	int res = maxH[0];
        	for(int i = 1; i < n; i++){
            	maxH[i] = h[i]; // 默认值
            	int tmax = 0;
            	for(int j = i-1; j >=0; j--){
                	if(w[j] > w[i] && l[j] > l[i]){
                    	tmax = (tmax > maxH[j])? tmax : maxH[j];
                	}
            	}
            	maxH[i] += tmax;
            	res = res > maxH[i] ? res : maxH[i];
        	}
        	return res;
            
        }
        public void swap(int[] A,int i,int j){
            int t = A[i];
            A[i] = A[j];
            A[j] = t;
        }
    }
    
  • 相关阅读:
    数据库表与视图的区别
    maven中snapshot版本和正式版本的区别
    @Retention注解
    java泛型以及通配符
    git 删除了本不应该删除的commit 如何恢复
    ES group分组聚合的坑
    solution for 1006 中国剩余定理
    solution for POJ 1001
    ondraw() 和dispatchdraw()的区别
    android几种定时器机制及区别(转载整理)
  • 原文地址:https://www.cnblogs.com/theskulls/p/5816226.html
Copyright © 2011-2022 走看看