本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】合并果子【题目描述】在一个果园里多多已经将所有的果子打了下来而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆.每一次合并多多可以把两堆果子合并到一起消耗的体力等于两堆果子的重量之和.可以看出所有的果子经过n − 1 n−1n−1次合并之后就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和.因为还要花大力气把这些果子搬回家所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为11,并且已知果子的种类数和每种果子的数目你的任务是设计出合并的次序方案使多多耗费的体力最少并输出这个最小的体力耗费值.例如有3 33种果子数目依次为1 , 2 , 9 1,2,91,2,9.可以先将1 , 2 1,21,2堆合并新堆数目为3 33,耗费体力为3 33.接着将新堆与原先的第三堆合并又得到新的堆数目为12 1212耗费体力为12 1212.所以多多总共耗费体力 3 12 15 3121531215.可以证明15 1515为最小的体力耗费值.【输入】第一行是一个整数n ( 1 ≤ n ≤ 10000 ) n(1≤n≤10000)n(1≤n≤10000),表示果子的种类数.第二行包含n nn个整数用空格分割第i ii个整数a i ( 1 ≤ a i ≤ 20000 ) a_i(1≤a_i≤20000)ai​(1≤ai​≤20000)是第i ii种果子的数目.【输出】包含一行这一行只包含一个整数也就是最小的体力耗费值.输入数据保证这个值小于2 31 2^{31}231.【输入样例】3 1 2 9【输出样例】15【算法标签】#堆排序#【代码详解】#includequeue#includecstring#includeiostream#includealgorithmusingnamespacestd;intn,x,sum;// sum: 总合并代价priority_queueint,vectorint,greaterintq;// 小根堆intmain(){cinn;for(inti1;in;i){cinx;q.push(x);// 将所有数插入小根堆}// coutq.top()endl;// 哈夫曼编码/合并果子算法for(inti1;in;i){intx1q.top();// 取出最小的q.pop();intx2q.top();// 取出次小的q.pop();sumx1x2;// 累加合并代价q.push(x1x2);// 将合并结果放回堆中}coutsum;return0;}【运行结果】3 1 2 9 15