题目大意:给定一段长度为N的序列,经过操作,问最后得到的最大值是多少。
题目分析:这个题本来想找规律做掉的,结果规律找错了,其实仔细看一下的话,每次的过程都是把最小的数拿走,留下剩余的加上。
那么就变成了直接模拟。
如下代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 300010
typedef long long LL;
using namespace std;
int n;
LL a[N],sum[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%I64d",&a[i]);
sort(a+1,a+n+1);
for(int i=n;i>=1;i--)
sum[i]=sum[i+1]+a[i];
LL ans=0;
ans+=sum[1]-a[n];
for(int i=1;i<=n;i++)
ans+=sum[i];
cout<<ans;
// while(1);
return 0;
}