zoukankan      html  css  js  c++  java
  • 题目1107:搬水果

    题目描述:

        在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一 起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。

        假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并输出这个最小的体力耗费值。例如有 3 种水果,数目依次为 1,2,9。可以先将 1,2 堆合并,新堆数目为3,耗费体力为 3。然后将新堆与原先的第三堆合并得到新的堆,耗费体力为 12。所以小明总共耗费体力=3+12=15,可以证明 15 为最小的体力耗费值。

    输入:

        每组数据输入包括两行,第一行是一个整数 n(1<=n<=10000),表示水果的种类数,如果 n 等于 0 表示输入结束,且不用处理。第二行包含 n 个整数,用空格分隔,第 i 个整数(1<=ai<=1000)是第 i 种水果的数目。

    输出:

    对于每组输入,输出一个整数并换行,这个值也就是最小的体力耗费值。输入数据保证这个值小于 2^31。

    样例输入:
    3
    9 1 2
    0
    样例输出:
    15

    总结:
    1. 第一次运行结果错了是因为每次用完队列没有清空,造成使用了前几次的数据出错;
    2. 还有一个错误就是多加了一个in.nextLine()去除多余回车,结果一直runtime error,无语,java做这种题输入就麻烦,一直出错。结论就是,要是要输入一个字符串而之前又有输入并以回车结束,就多加一个in.nextLine(),要是都是int输入之类的,就不用加。
     1 import java.util.PriorityQueue;
     2 import java.util.Queue;
     3 import java.util.Scanner;
     4  
     5 public class Main{
     6     public static void main(String[] args){
     7         Queue<Integer> qu=new PriorityQueue();
     8         Scanner in=new Scanner(System.in);
     9         while(in.hasNext()){
    10             int n=in.nextInt();
    11 //          in.nextLine();
    12             if(n==0){
    13                 break;
    14             }
    15             qu.clear();//一定要清空
    16             int[] sort=new int[n];
    17             for(int i=0;i<n;i++){
    18                 sort[i]=in.nextInt();
    19                 qu.add(sort[i]);
    20             }
    21             int answer=0;
    22             while(qu.size()>1){
    23                 int a=qu.peek();
    24                 qu.poll();
    25 //              System.out.println(a);
    26                 int b=qu.peek();
    27                 qu.poll();
    28 //              System.out.println(b);
    29                 answer=answer+a+b;
    30                 qu.add(a+b);
    31             }
    32             System.out.println(answer);
    33         }
    34     }
    35 }
    36 /**************************************************************
    37     Problem: 1107
    38     User: 0000H
    39     Language: Java
    40     Result: Accepted
    41     Time:690 ms
    42     Memory:75788 kb
    43 ****************************************************************/
  • 相关阅读:
    LeetCode 258 Add Digits
    LeetCode 231 Power of Two
    LeetCode 28 Implement strStr()
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 21 Merge Two Sorted Lists
    LeetCode 20 Valid Parentheses
    图形处理函数库 ImageTTFBBox
    php一些函数
    func_get_arg(),func_get_args()和func_num_args()的用法
    人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  • 原文地址:https://www.cnblogs.com/qq1029579233/p/4418642.html
Copyright © 2011-2022 走看看