例如:
先将数字放进小根堆,每次弹出两个,合成一个再扔进去,合的顺序反过来就是切的顺序
代码:
import java.io.*;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
int[] arr=new int[n];
String[] strs = br.readLine().split(" ");
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(strs[i]);
}
int res=minMoney(arr);
System.out.println(res);
}
private static int minMoney(int[] arr) {
PriorityQueue pQ=new PriorityQueue<>();
//讲数组中的元素都放进小顶堆
for (int i = 0; i 1){
cur= pQ.poll()+pQ.poll();
sum+=cur;//切开需要的money值
pQ.add(cur);
}
return sum;
}
}



