现在有一个长度为N的序列,按照游戏规则去做,问最多能够获得多少分。
思路:
很显然我们希望删除的数字永远都是最小的那个,所以我们将序列进行排序,然后从大到小考虑每个数字对结果的贡献的总价值即可。
Ac代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[350000];
int main()
{
int n;
while(~scanf("%d",&n))
{
__int64 sum=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum+=a[i];
sort(a+1,a+1+n);
if(n==1)
{
printf("%d\n",a[1]);
continue;
}
__int64 output=0;
__int64 cnt=2;
for(int i=1;i<=n;i++)
{
output+=cnt*a[i];
if(i<=n-2)cnt++;
}
printf("%I64d\n",output);
}
}