比赛 20111107 评测结果 AAAAAAAAAA
题目名称 删数 最终得分 100
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-07 11:04:25
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int N;
int Num[101];
long long F[101][101]; 

void init()
{
	scanf("%d\n",&N);
	for (int i=1;i<=N;i++)
		cin>>Num[i];
}

int GV(int k,int i)
{
	
	if(k==0 && i==0)
		return 0;
	
	if(k==N+1 && i==N+1)
		return 0;
	
	if(k==0)
		k++;
	if(i==N+1)
		i--;
	
	if(k==i)
		return Num[i];
	int tmp=Num[k]-Num[i];
	if(tmp<0)
		tmp=-tmp;
	return tmp*(i-k+1);
}

void dp()
{
	for (int i=1;i<=N;i++)
		F[i][0]=GV(1,i);
	
	for (int i=1;i<=N;i++)
		F[0][i]=GV(N-i+1,N);
	
	int p;
	for (int i=1;i<=N;i++)
	{
		for (int j=1;j<=N;j++)
		{
			p=i+j;
			if(p>N)
				continue;
			
			long long m=0;
			for (int k=0;k<=i;k++)
			{
				int tmp=GV(k+1,i);
				if(m<F[k][j]+ tmp )
					m=F[k][j]+ tmp;
			}
			
			F[i][j]=m;
			
			for (int k=0;k<=j;k++)
			{
				int tmp=GV(N-j+1,N-k);
				if(m<F[i][k]+tmp)
					m=F[i][k]+tmp;
			}
			
			if(m>F[i][j])
				F[i][j]=m;
		}
	}
	
	long long M=0;
	for (int i=0;i<=N;i++)
	{
		if(M<F[i][N-i])
			M=F[i][N-i];
	}
	cout<<M<<endl;
}

int main()
{
	freopen("remove.in","r",stdin);
	freopen("remove.out","w",stdout);
	init();
	
	dp();
	return 0;
}