有一些食物,放在一个两端开口的仓库里,每天只能从两端选择一端取出一件食物,并且食物的价值是随着天数逐天递增,
第i天的价值 本来价值为i,求n天取出食物,使之取得最大价值;
#include<stdio.h>
#include<string.h>
int dp[2005][2005];//dp[i][j]表示仅剩下i到j的东西未取出来的时候所得到的最大值
int a[2005];
int Max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
int n;
int i,j;
int max;
while(scanf("%d",&n)!=EOF)
{
memset(dp,0,sizeof(dp));
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
for(j=n;j>=i;j--)
dp[i][j]=Max(dp[i-1][j]+a[i-1]*(n+i-j-1),dp[i][j+1]+a[j+1]*(n-j+i-1));
max=-1;
for(i=1;i<=n;i++)
max=Max(dp[i][i]+a[i]*n,max);
printf("%d\n",max);
}
return 0;
}