import java.util.PriorityQueue; public class test31 { //一块金条切两半,花费和长度一样的铜板 //一群人分金条,怎么样最省铜板 //例如{10,20,30},就代表三个人,金条长度为60,要分为10,20,30三个部分 //如果把60先分为10和50,花费60,再把50分为20和30,花费50,一共花费110 //但如果把60分为30和30,再把30分为10和20,花费30,一共花费90 //输入一个数组,返回分割的最小代价 //建小根堆,每弹出两个加起来再返回进小根堆里 //哈夫曼树 public static int lessMoney(int[] arr){ PriorityQueue<Integer> pQ = new PriorityQueue<>(); for (int i = 0; i < arr.length; i++) { pQ.add(arr[i]); } int sum =0; int cur =0; while (pQ.size() >1){ cur = pQ.poll() + pQ.poll(); sum += cur; pQ.add(cur); } return sum; } }
切金条问题的贪心思想(哈夫曼树)
最新推荐文章于 2024-09-10 10:21:38 发布