目录
题目概述:
AC代码:
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
priority_queue<int,vector<int>,greater<int> > Heap;
int main()
{
std::ios::sync_with_stdio(false);
int n, ans = 0, a;
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> a;
Heap.push(a);
}
while (Heap.size()>1)
{
int l1 = Heap.top();
Heap.pop();
int l2 = Heap.top();
Heap.pop();
ans = ans + l1 + l2;
Heap.push(l1 + l2);
}
cout << ans << endl;
return 0;
}
分析思路:
1.通过画二叉树的方式,可以得出贪心策略:每一次都优先合最短的那两堆果子最后就可以得到最优解。
2.每一次取出队列两堆后再把合起来的新堆(l1+l2)加入队列。