Treats for the Cows
POJ - 3186
简单的区间DP,就不解释了。
#include<iostream>
#include<cstdio>
using namespace std;
const int INF=1e9;
const int maxn=2005;
int n, a[maxn];
int dp[maxn][maxn];
int main() {
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",a+i);
for(int i=0;i<n;i++) dp[i][i]=n*a[i];
for(int i=1;i<n;i++) {
for(int j=0;j<n-i;j++) {
dp[j][j+i]=max(dp[j][j+i-1]+(n-i)*a[j+i],dp[j+1][j+i]+(n-i)*a[j]);
}
}
printf("%d\n",dp[0][n-1]);
return 0;
}