蓝桥杯_练一练「谈判」 java_定制排序

蓝桥杯_练一练「谈判」 java_定制排序_第1张图片

分析

  1. 此题可以发现,要是花费最少,则每次邀请的部落需要是人数最少的,不然会让人数多的部落多次与小部落合成,比较费钱;所以先合成小部落
  2. 通过循环,只要容器里的元素个数大于一,就是还能继续合成部落,就继续先排序,合成后,把旧的部落删去,添加上新的部落;
  3. 删除时不能,a.remove(0)、a.remove(1);因为删除第一个后,元素会整体前移,故进行两次删除第一个元素的操作;
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        ArrayList<Integer> a=new ArrayList<>();
        int n= scan.nextInt();
        for (int i = 0; i < n; i++) {
            a.add(scan.nextInt());
        }
        int ans=0;
        while (a.size()>1){
            Collections.sort(a, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o1-o2;
                }
            });
            int t=a.get(0)+a.get(1);//前两个部落和在一块
            ans+=t;
            //分别删除刚刚和在一块的部落
            a.remove(0);
            a.remove(0);
            //将合在一块的部落添加进去
            a.add(t);
        }
        System.out.println(ans);
        scan.close();
    }
}

你可能感兴趣的:(蓝桥杯,java,蓝桥杯,排序算法)