【题解】款待奶牛

题目描述

  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;
} 
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10805034.html