这道题为签到题,首先对小根堆分析一下:
小根堆中,每个点的权值总是不小于父亲节点的权值。所以无论怎么取,先拿走的数一定不小于后面拿走的
所以只要贪心就可以AC了
附上大佬的代码
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int Case,n,i,j,a[N];ll A,B;
int main(){
scanf("%d",&Case);
while(Case--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
sort(a+1,a+n+1);
A=B=0;
for(i=n,j=1;i;i--,j^=1)if(j)A+=a[i];else B+=a[i];
printf("%lld %lld\n",A,B);
}
}