[Submit][Status][Web Board] Description FJ有n(1≤n≤2000)个美味的食物,他想卖掉它们来赚钱给奶牛。这些食物放在一些箱子里,它们有些有趣的特性: (1)这些食物被编号为1~n,每一天FJ可以从这排箱子的头部或者尾部取出食物去卖; (2)这些食物放得越久,年龄越大,价值越大,食物i有一个初始的价值V(i); (3)放了a天后,年龄为a,食物最终的价值为V(i)×a。 给定每一个食物的初始价值v(i),请求出FJ卖掉它们后可以获得的最大价值,第一天出售的食物的年龄为1,此后每增加一天食物的年龄就增加1。 Input 第1行:一个整数n; 第i+l行:每行为食物i的初始价值V(i)。 Output 1行:FJ最终可以获得的最大价值。 Sample Input 5 1 3 1 5 2 Sample Output 43 请使用C++scanf函数,给我代码
时间: 2024-01-22 12:19:30 浏览: 68
struts_i18n_login.rar_i18n
```c++
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 2005;
int n, a[MAXN], dp[MAXN][MAXN];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
dp[i][i] = a[i] * n;
}
for (int len = 2; len <= n; ++len) {
for (int l = 1; l + len - 1 <= n; ++l) {
int r = l + len - 1;
dp[l][r] = max(dp[l+1][r] + (n - len + 1) * a[l], dp[l][r-1] + (n - len + 1) * a[r]);
}
}
printf("%d\n", dp[1][n]);
return 0;
}
```
阅读全文