霍夫曼树poj 1339 poker card game
Posted itcsl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了霍夫曼树poj 1339 poker card game相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n; const int maxn=1e5+2; int main(){ int T; scanf("%d",&T); while(T--){ priority_queue<int,vector<int>,greater<int> > pq; scanf("%d",&n); int x; for(int i=0;i<n;i++){ scanf("%d",&x); pq.push(x); } int ans=0; n--; while(n--){ int x=pq.top(); pq.pop(); int y=pq.top(); pq.pop(); int z=x+y; pq.push(z); ans+=z; } printf("%d ",ans); } return 0; }
方法二
数组排序+辅助队列(利用新加进来的内结点的单调性)
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<cmath> using namespace std; int n; const int maxn=1e5+2; int a[maxn]; int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); queue<int> Q; int ans=0; int l=0; int t=n-1; while(t--){ int tmp=0; for(int i=0;i<2;i++){ if(!Q.empty()&&(l>=n||Q.front()<=a[l])){ tmp+=Q.front(); Q.pop(); }else{ tmp+=a[l]; l++; } } Q.push(tmp); ans+=tmp; } printf("%d ",ans); } return 0; }
以上是关于霍夫曼树poj 1339 poker card game的主要内容,如果未能解决你的问题,请参考以下文章