UVA 10954


Description

Download as PDF


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

分析:

一道機智題而已,只要每次把最小的兩個數相加,然後將得到的和放進原數組中每次得到的和加起來就可以了。就是一個循環每操作一次排序一次。其實想到這個挺容易的,但是說服自己很難啊,就總是覺得這樣想會有什麼漏洞,爲什麼兩個小的相加就可以了,總是想用嚴格的方法證明出來說服自己。

代碼:

#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;
}

////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章