#include <stdio.h>
#include <stdlib.h>
int a[20010];
long long sum=0;
int main()
{
int n,t,i,s;
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
while(n>1)
{
int firmin=0,secmin=1;
if(a[firmin]>a[secmin])
{
s=firmin;
firmin=secmin;
secmin=s;
}
for(i=2; i<n; i++)
if(a[i]<a[firmin])
{
secmin=firmin;
firmin=i;
}
else if(a[i]<a[secmin]) secmin=i;
t=a[firmin]+a[secmin];
sum+=t;
if(firmin==n-1)
{
s=firmin;
firmin=secmin;
secmin=s;
}
a[firmin]=t;
a[secmin]=a[n-1];
n--;
}
printf("%lld\n",sum);
return 0;
}
每次都找最小的两个数就可以了。
poj 3253
最新推荐文章于 2023-01-06 17:52:15 发布