题目描述
小明买了 n 件白色的衣服,他觉得所有衣服都是一种颜色太单调,希望对这些衣服进行染色,每次染色时,他会将某种颜色的所有衣服寄去染色厂,第 i 件衣服的邮费为 ai 元,染色厂会按照小明的要求将其中一部分衣服染成同一种任意的颜色,之后将衣服寄给小明, 请问小明要将 n 件衣服染成不同颜色的最小代价是多少?
输入描述
第一行为一个整数 n ,表示衣服的数量。
第二行包括 n 个整数 a1,a2...an 表示第 i 件衣服的邮费为 ai 元。
(1≤n≤105,1≤ai≤109 )
输出描述
输出一个整数表示小明所要花费的最小代价。
输入输出样例
示例 1
输入
5
5 1 3 2 1
输出
25
运行限制
最大运行时间:1s
最大运行内存: 256M
源码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class 小明的衣服 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
PriorityQueue<Long> priorityQueue=new PriorityQueue<Long>();
String[] s=br.readLine().split(" ");
for (int i = 0; i < n; i++) {
priorityQueue.add(Long.parseLong(s[i]));
}
long sum=0;
while(priorityQueue.size()>1) {
long a=priorityQueue.poll();
long b=priorityQueue.poll();
sum+=a+b;
priorityQueue.add(a+b);
}
System.out.println(sum);
}
}