这是一道很简单的贪心,因为刚刚买这门课的时候水平很渣,只会暴力做法,就像下面的….
(注意这个没处理n=1的情况)
#include
using namespace std;
#define INF 2147483648
void insert_sort(long long a[],int n)
{
int i,j;
long long t;
for(i=1;i1;
while(j>=0&&a[j]>t)
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
}
int main()
{
int n,i;
long long sum=0;
cin>>n;
long long a[n],b[n];
for(i=0;icin>>a[i];
b[i]=0;
}
insert_sort(a,n);
i=0;
while(a[1]!=INF)
{
a[0]=a[0]+a[1];
b[i]=a[0];
i++;
a[1]=INF;
insert_sort(a,n);
}
for(i=0;icout<
优先队列版本的:
#include
using namespace std;
int main()
{
int n,t,sum=0,tmp=0;
priority_queue<int,vector<int>,greater<int> >q;
scanf("%d",&n);
for(int i=0;iscanf("%d",&t);
q.push(t);
}
if(q.size()==1)
printf("0");
else
{
int s=q.size();
for(int i=0;i1;i++)
{
tmp=q.top();
q.pop();
tmp=tmp+q.top();
q.pop();
sum=sum+tmp;
q.push(tmp);
}
printf("%d",sum);
}
return 0;
}