1 条题解
-
1
小根堆 & 经典哈夫曼树的模型,每次合并重量最小的两堆果子即可。利用小根堆 弹出最值的属性,一共操作 次,时间复杂度为 ,由于原题数据范围较小, 数据也能过(不要这样写)。
#include<iostream> #include<algorithm> #include<queue> using namespace std; const int N = 100010; int res; int main() { int n; cin >> n; priority_queue<int, vector<int>, greater<int>> q;//小根堆 log(n) 弹出最大最小值 while(n --) { int x; scanf("%d", &x); q.push(x); } while(q.size() > 1)//还剩至少2个元素 { int a = q.top(); q.pop(); int b = q.top(); q.pop(); res += (a + b); q.push(a + b);//新的水果堆 } cout << res << endl; return 0; }
- 1
信息
- ID
- 5525
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 15
- 已通过
- 4
- 上传者