来源:FZU 1327
很水的贪心题,但是这里渐渐知道了怎么去分析贪心的取法,关键是使用不等式来计算我们最小值。。。
直接上代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN=10010;
int a[MAXN];
priority_queue<int ,vector<int>,greater<int> >pq;//优先队列
int main(){
int n,i,d;
while(scanf("%d",&n)!=EOF){
while(!pq.empty())pq.pop();//全部清除
for(i=0;i<n;i++)
{
scanf("%d",&d);
pq.push(d);
}
int d1,d2;
long long ans=0;
while(pq.size()>1){//留一个就好
d1=pq.top();
pq.pop();
d2=pq.top();
pq.pop();
d=d1+d2;
ans+=d;
pq.push(d);
}
printf("%lld\n",ans);
}
return 0;
}