P1334 瑞瑞的木板 洛谷
2017-03-18 15:06
190 查看
https://www.luogu.org/problem/show?pid=1334
题目描述
瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000)。于是,他神奇地买了一根足够长的木板,长度为所需的N根木板的长度的总和,他决定将这根木板切成所需的N根木板。(瑞瑞在切割木板时不会产生木屑,不需考虑切割时损耗的长度)瑞瑞切割木板时使用的是一种特殊的方式,这种方式在将一根长度为x的模板切为两根时,需要消耗x个单位的能量。瑞瑞拥有无尽的能量,但现在提倡节约能量,所以作为榜样,他决定尽可能节约能量。显然,总共需要切割N-1次,问题是,每次应该怎么切呢?请编程计算最少需要消耗的能量总和。
输入输出格式
输入格式:
第一行: 整数N,表示所需木板的数量
第2到N+1行: 每行为一个整数,表示一块木板的长度
输出格式:
一个整数,表示最少需要消耗的能量总和
输入输出样例
输入样例#1:3 8 5 8输出样例#1:
34
说明
将长度为21的木板,第一次切割为长度为8和长度为13的,消耗21个单位的能量,第二次将长度为13的木板切割为长度为5和8的,消耗13个单位的能量,共消耗34个单位的能量,是消耗能量最小的方案。
#include <iostream> #include <cstdio> #include <queue> #define maxn 20005 #define LL long long using namespace std; LL n,x,size,ans,cnt; priority_queue<LL,vector<LL>,greater<LL> >que; int main() { scanf("%lld",&n); for(int i=1;i<=n;i++) { cin>>x; que.push(x); } for(int i=1;i<n;i++) { cnt=que.top(); que.pop(); cnt+=que.top(); que.pop(); ans+=cnt; que.push(cnt); } printf("%lld",ans); return 0; }优先队列 189ms / 16.4MB 代码:0.44KB
相关文章推荐
- 堆——洛谷 P1334 瑞瑞的木板
- P1334 瑞瑞的木板
- 洛谷U2641 木板面积(area)——S.B.S.
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
- 洛谷 Divided the woods(木板分隔)
- 洛谷U2641 木板面积(area)——S.B.S.
- 洛谷 2664_切割木板_堆
- 洛谷U2641 木板面积(area)——S.B.S.
- 【u009】瑞瑞的木板
- 洛谷 Divided the woods(木板分隔)
- 洛谷.1333.瑞瑞的木棍(欧拉路径 Hash)
- 欧拉回路——洛谷 P1333 瑞瑞的木棍
- 洛谷 P3271 [JLOI2016]方
- 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]
- 洛谷——P1024 一元三次方程求解
- 【模拟】洛谷 P1003 铺地毯
- 【DP】洛谷 P1018 乘积最大
- 【洛谷P3384】【模板】树链剖分
- 洛谷 P1019 单词接龙
- 【排序】洛谷 P1059 明明的随机数