PKU : 3186 - Treats for the Cows
問題概要
http://poj.org/problem?id=3186
N個の自然数からなる数列が入力されます.
先頭か末尾から順番に数字を取っていって, X番目に取った数字には, Xをかけます.
それを足し合わせた値の最大値を出力してください.
プログラム
int t[2002]; int dp[2002][2002]; int dfs(int left,int right,int mul){ if(left == right) return mul*t[left]; if(dp[left][right] != -1) return dp[left][right]; return dp[left][right] = max(dfs(left+1,right,mul+1)+mul*t[left], dfs(left,right-1,mul+1)+mul*t[right]); } int main(void){ int n; while(scanf("%d",&n) != EOF){ rep(i,n){ scanf("%d",&t[i]); } memset(dp,-1,sizeof(dp)); printf("%d\n",dfs(0,n-1,1)); } }