55-围栏修复--PriorityQueue java优先队列的应用
围栏修复 描述
农夫约翰想修修牧场周围的一小部分篱笆。他测量围栏并认定他需要?(1≤ ? ≤20000)厚木板,每一个都具有一些整数长度大号我(1≤ 大号我 ≤50000)单元。然后,他购买了一块足够长的单板长板,以便看到N板(即长度为长度L i的总和)。FJ忽略了“切口”,当切割锯切时,木屑损失了额外的长度;
你也应该忽略它。
FJ遗憾地意识到他没有用锯切割木头的锯子,所以他用这个长板子偷偷地去农民唐的农场,礼貌地问他是否可以借锯。
壁橱资本家Farmer Don并没有给FJ借一块锯,而是向农民John提供了每块N -1切割的费用。切割一块木头的费用与其长度完全相同。切割长度为21的木板需要21美分。
农民唐然后让农夫约翰决定切割木板的顺序和位置。帮助Farmer John确定他可以用来创建N个木板的最低金额。FJ知道他可以以各种不同的顺序切割板,这将导致不同的费用,因为所得到的中间板具有不同的长度。
输入
第1行:一个整数N,木板的数量
第2行.N +1:每行包含一个描述所需木板长度的整数 产量
第1行:一个整数:他必须花费N -1削减的最低金额 样本输入
3 8 5 8
【55-围栏修复--PriorityQueue java优先队列的应用】样本输出
34
暗示
他希望将长度为21的板切成8,5和8的长度。
原板的尺寸为8 + 5 + 8 = 21。第一次切割将花费21,并且应该用于将板切割成13和8的碎片。第二次切割将花费13,并且应该用于将13切割成8和5.这将花费21 + 13 = 34 。如果将21切割成16和5,则第二次切割将花费16,总共37(超过34)。 思路:贪心+优先队列: 每次去最小的合并,合并的即为要切的长度,所以每次取最小的两个,然后弹出,并加和放入优先队列。 java中的优先队列: PriorityQueue code:
package lq2018_gs;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class test { public static void main(String[] args) {
// TODO Auto-generated method stub
Queue que = new PriorityQueue();
System.out.println(que.toString());
que.add(20);
que.add(10);
que.add(-2);
que.add(100);
System.out.println(que.toString());
while(!que.isEmpty()) {
int x = que.peek();
que.poll();
System.out.println("x: " + x);
}
}}
本题代码:注意要改为 Main 并去掉报名,否则包error time
package lan_qiao;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class t1 {
public static Queue que = new PriorityQueue();
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
for(int i = 0;
i < n;
i++) {
que.add(cin.nextInt());
}
long ans = 0;
while(que.size() > 1) {
int x = que.poll();
int y = que.poll();
ans += x + y;
que.add(x + y);
}
System.out.println(ans);
cin.close();
}}
转载于:https://www.cnblogs.com/zhumengdexiaobai/p/10878063.html
推荐阅读
- 七老修复好敏感、角质层薄、红血丝
- 青岛机情派iPhone5s指纹识别修复
- 诺丽果(修复肝细胞,增强肝脏活力!)
- 颅骨缺损的专业治疗_北京做peek颅骨修复那个医院好
- 航空总医院穆苍山PEEK颅骨修复整形术,让她重绽笑颜
- 江苏颅骨修复医院排行榜_南京peek修补医院
- 如何在戴尔PC上修复Windows|如何在戴尔PC上修复Windows 7、8、8.1和10的GPT硬盘上的EFI引导加载程序
- s2-045漏洞的复现及其修复
- 与朝霞隔着围栏
- 如何定位并修复 HttpCore5 中的 HTTP2 流量控制问题