因为最高峰-最低峰<=17,我们可以枚举在最高峰和最低峰的任意某高度为下界,若小于这一高度就移动,大于这个高度+17就移动。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,ans=9999999,sum;
int a[1010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=a[1];i<=a[n];i++)
{
sum=0;
for(int j=1;j<=n;j++)
{
if(a[j]-i>17) sum+=(a[j]-i-17)*(a[j]-i-17);
if(a[j]<i) sum+=(a[j]-i)*(a[j]-i);
}
ans=min(sum,ans);
}
cout<<ans;
return 0;
}