这是一个背包问题;
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1001
int main()
{
int n,i,j;
int a[N];
int Min,Max;
int dp[N];
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));//不清0的话就是WA
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
Min=a[i];
Max=a[i];
for(j=i-1;j>=1;j--)
{
Min=min(a[j],Min);
Max=max(a[j],Max);
if(dp[i]<dp[j-1]+(Max-Min)*(Max-Min))
{
dp[i]=dp[j-1]+(Max-Min)*(Max-Min);
}
}
}
printf("%d\n",dp[n]);
}
return 0;
}