SDNU 1013.石子合併簡化版

SDNU 1013.石子合併簡化版

Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 709 Accepted Submission(s): 124
Description
有n堆石子,每次從中抽取兩堆進行合併,合併後的石子數記做權,並把合併後的石子堆當做新的一堆放回,重新隨機抽取兩堆石子,重複上面的操作,直到所有石子合併成一堆,則每次合併的和的總和是多少?

Input
第一行:石子的堆數n(1 <= n <= 10000)。
第二行:每堆石子的石子數a[i](1 <= a[i] <= 10000)。

Output
每次合併的權的最大總和(由於最後的結果較大,請對最終的結果mod1000000007)

Sample Input
3
6 7 10

Sample Output
40

Hint
先合併7和10,得到17,再將17與6合併得到23

水題,有點貪心的思想,直接附上代碼:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <cstdio>
using namespace std;
typedef long long ll;

int main()
{
    int a[10005];
    int n;
    ll sum = 0;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a,a+n,greater<int>());
    for (int i = 0;i < n - 1; i++)
    {
        a[i+1] += a[i];
        sum += a[i+1];
    }
    cout << sum % 1000000007 << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章