首页 > 编程语言 >217. 栅栏修理 Fence Repair(挑战程序设计竞赛)

217. 栅栏修理 Fence Repair(挑战程序设计竞赛)

时间:2023-01-31 21:23:44浏览次数:67  
标签:217 木板 Fence Repair int 木块 长度 代价

地址 https://www.papamelon.com/problem/217

我们的目标是将一块完整的木板切割成 n 块,每块长度为 L1,L2,L3...Ln 。
切割后各个木块的长度总和与切割前的木板长度相等。
每次在一块木板上切一刀,代价等于该木板的长度。例如:
在长度为 21 的木板切一刀,变成两块木板,长度分别为 5,16,所需代价为 21
在长度为 16 的木板上再切一刀,变为两块木板,长度分别为8,8,所需代价为 16
为了达到上述目标,求最小的切割代价是多少。

输入
第一行是整数 
n(1≤n≤20000),表示要将原始木板切割成多少块
接下来 n 行,每行一个整数,表示最终每块小木板的长度,其中 
1≤Li≤50000
输出
一行,一个整数,表示达到目标所需的最小代价
提示
2021/12/07 测试数据更新,以往通过代码不会重判,可尝试重新提交
样例 1
输入
3
8
5
8
输出
34

根据题意分析 可以理解为各个木块碎片最后拼成一块,每次拼装的代价就是拼装的长度

我们使用优先队列进行各个木块的长度存储(两个木块合并后要弹出两个木块的长度并且加入合并后的木块长度,重新排序)
根据li的数据范围计算(20000X50000) 我们需要开longlong 变量
代码如下

#include <iostream>
#include <algorithm>
#include <queue>
using  namespace std;

priority_queue<long long, vector<long long>, greater<long long>> q;
int n;
int main(){
    cin >>n;
    for(int i = 0;i < n;i++){
        int t ;cin >>t;
        q.push(t);
    }
    long long ans = 0;
    while(q.size() > 1){
        int a= q.top();q.pop();
        int b = q.top();q.pop();
        ans += a+b;
        q.push(a+b); 
    }
    cout<<ans<<endl;
    return 0;
}

我的视频题解空间

标签:217,木板,Fence,Repair,int,木块,长度,代价
From: https://www.cnblogs.com/itdef/p/17080793.html

相关文章

  • POJ--3253 Fence Repair(贪心/优先队列)
    记录23:572023-1-25http://poj.org/problem?id=3253reference:《挑战程序设计竞赛(第2版)》2.2.4p47DescriptionFarmerJohnwantstorepairasmalllengthofth......
  • abc217 F - Make Pair
    题意:\(2n\)个人从小到大标号排成一行,有\(m\)对关系\(<x,y>\)。每次可删除相邻且有关系的两人,并移动旁边的位置使队伍恢复紧凑问把所有人删完的方案数\(n\le200\)......
  • 20211217|写给一年后的培民的一封信
    亲爱的民:培民,见面如晤,没错这是一封来自一年前的信。自四月份考试结束,我就游荡于广州和深圳,记4.14下午自广州到深圳,第一站即是找立彬,我自知今年插本已是与我无缘,随即开始......
  • 20211217|写给一年后的立彬的一封信
    亲爱的彬:立彬,见面如晤,没错这是一封来自一年前的信。自四月份考试结束,我就游荡于广州和深圳,记4.14下午自广州到深圳,第一站即是找你,顶楼你留了门卡,大门你远程开,晚上下班我......
  • 217. Contains Duplicate [Easy]
    217.ContainsDuplicateGivenanintegerarraynums,returntrueifanyvalueappearsatleasttwiceinthearray,andreturnfalseifeveryelementisdistinc......
  • P1217 [USACO1.5]回文质数 Prime Palindromes
    题目题目描述因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。写一个程序来找出范围[a,b](5<=a<b<=100,000,000)(一亿)间的......
  • 好题分享、心路历程(力扣2173)——连续登录
    【题目介绍】该题为力扣2173,名为最多连胜的次数。【题型分类】属于连续专题。官网标为困难题。【思路分享】这里的连续不属于时间连续,属于事件连续,采用两次row_numb......
  • 教育部重磅 | 217个大数据人工智能数字经济本科专业最新获批!
    2022年2月24日,教育部公布2021年度普通高等学校本科专业备案和审批结果。其中大数据、人工智能和数字经济等专业持续火热。博雅数智第一时间对名单进行了整理分析,2021年共217......
  • redisson的Lock,SpinLock与FencedLock
    Lock redisson的基本lock实现,使用发布订阅机制实现通信可以查看源码中pubSub的相关使用SpingLock使用"ExponentialBackoffstrategy"指数退避策略实现的分布式......
  • 力扣---217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=[1......