题目:
Walk Alone has nn piles of stones, and there are a_iai stones in the ii-th pile.
He can do an operation to these stones for n-1n−1 times. In each operation, he can select two piles of stones of size xx and yy, and merge them (the two piles will become a larger pile of size x+yx+y), and he will get x\cdot yx⋅y score after that.
Walk Alone wants to know the maximal total score he can get. Can you help him?
题解:
#include<iostream>
#include<vector>
#include<algorithm>
using
namespace
std;
int
main()
{
long
long
n = 0, k = 0, sum = 0;
scanf
(
"%lld"
, &n);
long
long
a[100100] = {0};
for
(
int
i = 0; i < n; i++)
scanf
(
"%lld"
,&a[i]);
sort(a,a+n);
for
(
int
i = n-1; i >= 1; i--)
{
sum = a[i] * a[i - 1] + sum;
k = a[i] + a[i - 1];
a[i - 1] = k;
}
printf
(
"%lld"
, sum);
}