题目描述
Farmer John有n(1≤n≤2000)个美味的食物,他想卖掉它们来赚钱给奶牛。这些食物放在一些箱子里,它们有些有趣的特性:
(1)这些食物被编号为1-n,每一天Farmer John可以从这排箱子的头部或者尾部取出食物去卖;
(2)这些食物放得越久,年龄越大,价值越大,食物i有一个初始的价值v(i);
(3)放了a天后,年龄为a,食物最终的价值为v(i)×a。
给定每一个食物的初始价值v(i),请求出FJ卖掉它们后可以获得的最大价值,第一天出售的食物年龄为1,此后每增加一天食物的年龄就增加1。
输入格式
第一行,一个整数n;
第2×n+1行,每行为食物i的初始价值v(i)。
输出格式
一行,为FJ最终可以获得的最大价值。
输入样例
5
1
3
1
5
2
输出样例
43
题解
区间dp入门题,暴力即可。
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #define MAXN 2002 using namespace std; int n; int a[MAXN]; int f[MAXN][MAXN]; int ans; int main() { cin >> n; for(register int i = 1; i <= n; i++) { cin >> a[i]; } for(register int i = 0; i <= n; i++) { for(register int j = n + 1; j > i; j--) { f[i][j] = max(f[i - (i >= 1)][j] + a[i] * (i + n - j + 1), f[i][j + (j <= n)] + a[j] * (i + n - j + 1)); } } for(register int i = 0; i <= n; i++) { ans = max(ans, f[i][i + 1]); } cout << ans; return 0; }
参考程序
原文地址:https://www.cnblogs.com/kcn999/p/10805034.html
时间: 2024-10-10 14:11:40