
根据题意确实比较好理解就是要使最多果子数量的那堆果子的合并次数比较少
#include<bits/stdc++.h>
#include<string>
using namespace std;
typedef long long ll;
using namespace std;
const int N=10005;
int sum[N];
priority_queue <int,vector<int>,greater<int> > q;
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
q.push(x);
}
int sum=q.top();
q.pop();
sum+=q.top();
q.pop();
q.push(sum);
ll ans=sum;
while(q.size()>1)
{
int x=q.top();
q.pop();
int y=q.top();
q.pop();
q.push(x+y);
ans+=x+y;
}
cout<<ans<<endl;
q.pop();
return 0;
}
该博客主要探讨了一个算法问题,即如何在保持最多果子数量的同时,减少堆之间的合并次数。通过使用优先级队列,博主展示了如何实现这一目标。在代码中,博主读取多个整数并将其放入队列,然后进行合并操作,最终输出总合并次数。这个过程涉及到数据结构和算法优化的知识。
454

被折叠的 条评论
为什么被折叠?



