码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】款待奶牛

时间:2019-05-03 14:15:35      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:math   cin   奶牛   mes   入门   cout   gif   using   技术   

题目描述

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

 

【题解】款待奶牛

标签:math   cin   奶牛   mes   入门   cout   gif   using   技术   

原文地址:https://www.cnblogs.com/kcn999/p/10805034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!