NOJ1081 合并石子

#include<stdio.h>
#include<stdlib.h>
int m,n,N,A[10000];

int cmp(const void *a ,const void *b )
{
 return *(int *)b-*(int *)a;
}
long int f()
{
 int k,t;
 long int sum=0,sum1=0;
 qsort(A,n,sizeof(A[0]),cmp);
 while(m>0)
 {sum1=A[m]+A[m-1];
 sum+=sum1;
 m--; n--;
 for(k=n-1;k>=0;k--)
  if(A[k]<sum1)
   {A[k+1]=A[k]; A[k]=sum1;}
  else
   break;
 }
 return sum;
}

int main()
{
 int p; 
 scanf("%d",&N);
 m=N-1,n=N;
 for(p=0;p<N;p++)
  scanf("%d",&A[p]);
 printf("%ld",f());system("pause");
 return 0;
}

你可能感兴趣的:(NOJ1081 合并石子)