Description
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
分析:
一道機智題而已,只要每次把最小的兩個數相加,然後將得到的和放進原數組中每次得到的和加起來就可以了。就是一個循環每操作一次排序一次。其實想到這個挺容易的,但是說服自己很難啊,就總是覺得這樣想會有什麼漏洞,爲什麼兩個小的相加就可以了,總是想用嚴格的方法證明出來說服自己。
代碼:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL A[5005];
int main()
{
// freopen("in.txt","r",stdin);
LL n,pos;
LL ans;
while(~scanf("%lld",&n)&&n){
memset(A,0,sizeof(A));
for(LL i=0;i<n;++i){
scanf("%lld",&A[i]);
}
pos=0;ans=0;
for(int i=0;i!=n-1;++i){
sort(A+pos,A+n);
ans+=A[pos]+A[pos+1];
A[pos+1]+=A[pos];
++pos;
}
printf("%lld\n",ans);
}
return 0;
}