【发布时间】:2019-06-29 09:48:59
【问题描述】:
FJ 购买了 N (1
零食编号为 1..N,并以单个文件顺序存储在两端打开的长盒子中。在任何一天,FJ 都可以从他存放的零食的任一端取回一份零食。 就像精美的葡萄酒和美味的奶酪一样,这些零食会随着年龄的增长而提高,价格也会更高。 款待并不统一:有些更好,具有更高的内在价值。对待 i 的值为 v(i) (1
第一个零食在第 1 天售出,年龄 a=1。之后的每一天,年龄都会增加 1。
输入 第 1 行:单个整数,N
第 2..N+1 行:第 i+1 行包含treat v(i) 的值
输出 FJ通过出售零食可以获得的最大收入
示例 输入: 5
1 3 1 5 2
输出: 43
在这个问题中 dp 的基本方法是什么?我如何处理 dp 矩阵中的年龄...?唯一让我想到的方法是递归方法...我是 DP 的新手,我已经解决了一些基本的 dp 问题,但这超出了我的想法...这是我迄今为止尝试过的
int give(int a[],int x,int y,int age)
{
if(x==y) return age*a[x];
return max(age*a[x]+give(a,x+1,y,age+1),age*a[y]+give(a,x,y-1,age+1));
}
x=起始索引,从 0 初始化,y=last index,n-1,age=1 at first call
【问题讨论】:
-
@sp2danny bro 我以前读过这篇社论,但没有遵循所使用的概念
-
您有一个问题要解决并开始一个解决方案。你的问题是什么? (您面临什么具体问题?)
-
@JaMiT 我现在不知道该怎么办......我正在考虑创建一个 n*n 的 2d dp 矩阵,并且在我的脑海中有一个逻辑......但是如何我是否在该矩阵中处理年龄
-
@satish 这是一个计划。写出您希望矩阵表示的内容,并概述您的逻辑要求(例如前置条件、后置条件和不变量)。然后创建你的矩阵,试试你的逻辑,看看会发生什么。如果实际结果与您的预期结果不符,您可能会在这里提出更好的问题。