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;
}