首页 > [NOIP2004]合并果子
头像 savage
发表于 2019-09-07 12:03:47
算法知识点: 贪心,哈夫曼树,堆,优先队列 复杂度: 解题思路: 经典哈夫曼树的模型,每次合并重量最小的两堆果子即可。 C++ 代码: #include <iostream> #include <algorithm> #in 展开全文
头像 savage
发表于 2019-08-29 22:42:26
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只 展开全文
头像 小嗷犬
发表于 2023-08-18 22:46:17
考察知识点:贪心、优先队列、哈夫曼树 题目翻译一下就是 个节点构成一棵二叉树,求这棵树的最小带权路径长度。 哈夫曼树 是带权路径长度最小的树,所以本题只需要构造一棵哈夫曼树即可。 时间复杂度: #include <bits/stdc++.h> using namespace std; 展开全文
头像 威风镰鼬
发表于 2021-07-06 18:25:18
思路 贪心正解。用优先队列,每次把最小的两个果子合并了,得到的是最优解。 代码 #include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int> , greater<int&g 展开全文
头像 expect2004
发表于 2019-08-30 21:56:40
显然每次选取两堆重量最小的最好。 主要要介绍的不是这个解法,而是几个奇奇怪怪的东西。 Heap STL中常用的堆是priority_queue(优先队列),但是STL同样支持一个奇怪的东西为heap heap有几个函数:make_heap,pop_heap,push_heap 具体用法右转百度 展开全文
头像 zhangjitong
发表于 2024-10-04 21:00:40
直接上AC代码 #include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int>,greater<int>>q; int n,ans; int main(){ 展开全文
头像 sunny_forever
发表于 2021-08-04 20:58:26
每次合并最轻的两堆 Code #include <bits/stdc++.h> using namespace std; const int N = 10010; typedef long long ll; priority_queue<int,vector<int& 展开全文
头像 CH_cycyc
发表于 2024-12-21 18:43:22
链接:https://ac.nowcoder.com/acm/problem/16663 来源:牛客网 题目描述     每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果 展开全文
头像 DearAlice
发表于 2024-03-07 21:34:28
采用数组模拟,思想类似于插入排序。 import java.util.Scanner; public class NC16663 { public static void main(String[] args) { Scanner sc = new Scanner(Syst 展开全文
头像 装糊涂高手_
发表于 2022-04-03 13:01:41
思路:果子堆无序,每次操作选最小的两个合并成堆即可; 显然可以使用优先队列构建小顶堆来解决 pop前两个数求加和后再放回堆中,重复操作 代码如下: #include <bits/stdc++.h> using namespace std; priority_queue<int,v 展开全文