分割金条的最小代价
Posted laydown
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分割金条的最小代价相关的知识,希望对你有一定的参考价值。
import java.util.PriorityQueue;
/**
* 一块金条切成俩半,需要花费和金条长度数值相等的铜板。
* 比如{10,20,30}代表金条长度60,三个人分,如果先分成10,50,花费60铜板,再把50分成20,30,花费50铜板,总消费110铜板;
* 如果先分成30,30,花费60铜板,再把30分成20,10,花费30铜板,总消费90铜板。
* 输入一个数组,返回分割的最小代价
*/
public class LessMoneySplitGold {
public static int lessMoney2(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;
}
}
/* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
以上是关于分割金条的最小代价的主要内容,如果未能解决你的问题,请参考以下文章
POJ 1651 Multiplication Puzzle 区间DP
胸片分割基于matlab GUI最小误差法胸片分割系统含Matlab源码 1065期