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