zoukankan      html  css  js  c++  java
  • 网易2017春招笔试真题编程题集合(11)——堆砖块

    小易有n块砖块,每一块砖块有一个高度。小易希望利用这些砖块堆砌两座相同高度的塔。为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次。小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢。 

    输入描述:
    输入包括两行:
    第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块
    第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ height[i] ≤ 500000)
    输出描述:
    如果小易能堆砌出两座高度相同的塔,输出最高能拼凑的高度,如果不能则输出-1.
    保证答案不大于500000。
    输入例子:
    3
    2 3 5
    输出例子:
    5

    参考:http://blog.csdn.net/zhufenghao/article/details/69802667

    使用动态规划

    import java.util.*;
    public class Main{
        public static void main(String args[]){
            Scanner sc=new Scanner(System.in);
            while(sc.hasNext()){
                int n=sc.nextInt();
                int bricks[]=new int [n];
                int sum=0;
                for(int i=0;i<n;i++){
                    bricks[i]=sc.nextInt();
                    sum=sum+bricks[i];
                }
                int[][] h=new int[n+1][sum+1];
                tower(bricks,h,n,sum);
                System.out.println(h[n][0]>0?h[n][0]:-1);
            }
            sc.close(); 
        }
        public static void tower(int[] bricks,int[][] h,int n,int sum){
            h[0][0]=0;
            for(int i=1;i<=sum;i++){
                h[0][i]=Integer.MIN_VALUE;
            }
            for(int i=1;i<=n;i++){
                int b=bricks[i-1];
                for(int j=0;i<=sum;j++){
                    h[i][j]=h[i-1][j];
                    if(j+b<=sum){
                        h[i][j]=Math.max(h[i][j], h[i-1][j+b]+b);
                    }
                    if(b-j>0){
                        h[i][j]=Math.max(h[i][j],h[i-1][b-j]+b-j);
                    }else{
                        h[i][j]=Math.max(h[i][j],h[i-1][j-b]);
                    }
                }
            }
        }
    }

    但提交运行:存在数组越界等非法访问情况???

  • 相关阅读:
    Django准备知识-web应用、http协议、web框架、Django简介
    Django
    MySQL(基本语句)
    jsvascript === 和==的区别
    控制input只能输入1-200范围的数字
    删除数组中指定的某个元素
    微信授权登陆绑定
    通过GZ代替document.getElementById()
    判断浏览器版本
    截取逗号后面所有字符
  • 原文地址:https://www.cnblogs.com/dengyt/p/6962795.html
Copyright © 2011-2022 走看看