博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1334 瑞瑞的木板
阅读量:4642 次
发布时间:2019-06-09

本文共 1347 字,大约阅读时间需要 4 分钟。

题目描述

瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000)。于是,他神奇地买了一根足够长的木板,长度为所需的N根木板的长度的总和,他决定将这根木板切成所需的N根木板。(瑞瑞在切割木板时不会产生木屑,不需考虑切割时损耗的长度)瑞瑞切割木板时使用的是一种特殊的方式,这种方式在将一根长度为x的模板切为两根时,需要消耗x个单位的能量。瑞瑞拥有无尽的能量,但现在提倡节约能量,所以作为榜样,他决定尽可能节约能量。显然,总共需要切割N-1次,问题是,每次应该怎么切呢?请编程计算最少需要消耗的能量总和。

输入输出格式

输入格式:

第一行: 整数N,表示所需木板的数量

第2到N+1行: 每行为一个整数,表示一块木板的长度

输出格式:

一个整数,表示最少需要消耗的能量总和

输入输出样例

输入样例#1:
3858
输出样例#1:
34

说明

将长度为21的木板,第一次切割为长度为8和长度为13的,消耗21个单位的能量,第二次将长度为13的木板切割为长度为5和8的,消耗13个单位的能量,共消耗34个单位的能量,是消耗能量最小的方案。

 

小根堆

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define lli long long int 7 using namespace std; 8 void read(lli & n) 9 {10 char c='+';lli x=0;lli flag=0;11 while(c<'0'||c>'9')12 {13 c=getchar();14 if(c=='-')flag=1;15 }16 17 while(c>='0'&&c<='9')18 x=x*10+c-48,c=getchar();19 if(flag==1)n=-x;20 else n=x;21 }22 priority_queue
,greater
>q;23 lli n,p;24 lli ans;25 int main()26 {27 read(n);28 for(int i=1;i<=n;i++)29 {30 read(p);31 q.push(p);32 }33 for(int i=1;i<=n-1;i++)34 {35 lli x=q.top();36 q.pop();37 lli y=q.top();38 q.pop();39 x=x+y;40 ans+=x;41 q.push(x);42 }43 cout<

 

转载于:https://www.cnblogs.com/zwfymqz/p/7044603.html

你可能感兴趣的文章
context 插图
查看>>
文件管理器中不支持的wma歌曲也显示可以播放的音乐图标
查看>>
Java基础学习-流程控制语句
查看>>
Shell中read的常用方式
查看>>
01javascript数据类型
查看>>
asp.net实现md5加密方法详解
查看>>
AJAX
查看>>
table 的thead th 固定 tbody滚动例子
查看>>
并行计算思考----回溯法求解数独问题
查看>>
设计模式:模板模式
查看>>
和菜鸟一起学OK6410之ADC模块
查看>>
代理 模式
查看>>
[git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)
查看>>
DOM Core和HTML DOM的区别
查看>>
SurfaceView+MediaPlay的bug们
查看>>
网络表示学习总结
查看>>
完成评论功能
查看>>
far和near
查看>>
Python爬虫实战四之抓取淘宝MM照片
查看>>
2015 Multi-University Training Contest 1
查看>>