非常经典的贪心问题,排队打水,方法是最快的人先打水,最墨迹的最后打。
加入等待序列是 5 1 2 6 7 4 8, 那么总需要的时间就是
5 * 6 + 1 * 5 + 2 * 4 + …
第一个人打的5分钟需要六个人等
第二个人打的1分钟需要五个人等
第三个人打的2分钟需要四个人等
…
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.PriorityQueue;
class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(System.out);
static PriorityQueue<Integer> q = new PriorityQueue<>();
public static void main(String[] args) throws Exception {
String s[] = br.readLine().split(" ");
int n = Integer.parseInt(s[0]);
s = br.readLine().split(" ");
for (int i = 0; i < n; i++) q.offer(Integer.parseInt(s[i]));
long res = 0;
for (int i = n - 1; i >= 1; i--) res += q.poll() * i;
pw.println(res);
pw.flush();
pw.close();
br.close();
}
}