洛谷P1090 合并果子
一道水题
贪心算法
选两个最小的,加起来再扔回去比较。
用sort排序太麻烦了,直接用小根堆做,效果显著。
C++:
#include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<algorithm> #include<functional> #define maxn 10001 #define ll long long using namespace std; priority_queue<int,vector<int>,greater<int> > q; int n,a,sum1,sum2,qwq;//qwq合并后的 ll ans; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a; q.push(a); } while(!q.empty()){ if(q.size()==1) break; else{ sum1=q.top(); q.pop(); sum2=q.top(); q.pop(); qwq=sum1+sum2; ans+=qwq; q.push(qwq); } } cout<<ans; return 0; }