问题描述
石子游戏的规则如下:
地上有n堆石子,每次操作可选取两堆石子(石子个数分别为x和y)并将它们合并,操作的得分记为(x+1)×(y+1),对地上的石子堆进行操作直到只剩下一堆石子时停止游戏。
请问在整个游戏过程中操作的总得分的最大值是多少?
#include <iostream>
#include<algorithm>
using namespace std;
int amp(int x,int y)
{
if(x!=y)
return x>y;
}
int main()
{ long long sum=0;long long b;
long long n;cin>>n;long long a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,amp);
for(int i=0;i<n-1;i=i+1)
{
b=(a[i]+1)*(a[i+1]+1);
a[i+1]=a[i]+a[i+1];
sum=sum+b;
}
cout<<sum;
}