c/c++语言开发共享菜鸡哈屠教你合并果子

我们先来看题: (图片来自洛谷) 题解:这是一道贪心。每次取最小两堆合并即可。 证明的话,自己画一棵"合并树",就会很清晰了。 每一堆果子用数组记录,就能AC,用不着优化。 AC代码: 不过!!! 还有更快的。那就是 优先队列 。 优先队列,就是优先的队列,内部是由"堆"来实现。 我之前连半点数据结 …

我们先来看题:

菜鸡哈屠教你合并果子

菜鸡哈屠教你合并果子

 

(图片来自洛谷)

 

题解:这是一道贪心。每次取最小两堆合并即可。            证明的话,自己画一棵”合并树”,就会很清晰了。        每一堆果子用数组记录,就能ac,用不着优化。     

ac代码:

 

不过!!!

还有更快的。那就是  优先队列  。

优先队列,就是优先的队列,内部是由”堆”来实现。    我之前连半点数据结构都没有提到过。不过,没关系!!我接下来会更新关于这一方面的内容。

这里简单介绍一下  优先队列  。    它是个队列,你把数据存进去,c++的stl自动帮帮你排序(你可以这么理解吧)。

基本操作:

 1 q.top();   查找队列顶部。                  1 q.pop();  弹出队列首元素。                 1 q.top();   返回值为队列首元素。

细节以后我会慢慢讲。

ac代码:

 1 #include <bits/stdc++.h>   2 #define n 10010   3 using namespace std;   4 int n,a,s;   5 priority_queue <int,vector<int>,greater<int> >b;   6 int main(){   7     cin>>n;   8     for(int i=1;i<=n;i++) {cin>>a;    b.push(a);}   9     while(b.size()>=2){  10         int x=b.top();   11         b.pop();  12         int y=b.top();  13         b.pop();  14         s+=x+y;  15         b.push(x+y);  16     }  17     cout<<s<<endl;  18     return 0;  19 }

 

 

感谢大家的阅读。。。安利我自己的博客中。。。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602560.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐