原代码,前面思路和题解相同,只是使用dp的时候换成了贪心 wa了 #11
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long long ll;
inline int read()
{
int f=0,a=0;char c=getchar();
while(!isdigit(c))f|=c=='-',c=getchar();
while(isdigit(c))a=(a<<1)+(a<<3)+c-'0',c=getchar();
return f ? -a:a;
}
inline void write(int a)
{
if(a<0)putchar('-'),a=-a;
if(a>9)write(a/10);
putchar(a%10+'0');
}
const int N=1e4+3;
int num[N];
int cha[N];
int n;
ll sum;
ll res,resp;
int maxx,minn,Mid;
queue<int> que;
signed main()
{
n=read();
for(int i=0;i<n;i++)
{
num[i]=read();
if(i!=0)
cha[i-1]=num[i]-num[i-1];
}
sort(cha,cha+n-1);
for(int Mid=1;Mid<=num[n-1];Mid++)
{
res=0;
maxx=num[n-1];
minn=num[0];
sum=minn+maxx;
que.push(maxx*n);
que.push(minn*n);
int left=0,right=0;
for(int i=n-2;i>=1;--i)
{
if((Mid-minn>maxx-Mid&&minn+cha[i]<Mid)||(maxx-cha[i]<Mid))
{
minn=minn+cha[i];
sum+=minn;
que.push(minn*n);
left+=cha[i];
}
else
{
maxx=maxx-cha[i];
sum+=maxx;
que.push(maxx*n);
right+=cha[i];
}
}
while(que.size())
{
res+=(que.front()-sum)*(que.front()-sum);
que.pop();
}
if(Mid==1)resp=res;
resp=min(res,resp);
}
printf("%lld",resp/n);
return 0;
}