给出n个苹果的最大利润

时间:2014-04-21 18:44:44

标签: algorithm recursion time-complexity

给出n个苹果出售和一系列n个整数'价格'这样,价格[i]表示可以卖出i + 1个苹果的价格。计算我们可以选择的任何组合销售n个苹果可以产生的最大收入。

示例:给出8个苹果和价格数组如下: -

{1,5,8,9,10,17,17,20}
i.e.price of 1 apple = $1
total selling price of 2 apples = $5, etc.

最高收入将通过销售2 + 6个苹果产生,总共5 + 17 = 22美元。

我有一个简单的递归解决方案,但我想知道我们可以实现的最佳时间复杂度是多少?是否有适用动态编程或记忆的范围?

谢谢!

3 个答案:

答案 0 :(得分:1)

  

是否有适用动态编程或记忆的范围?

是的,您的问题类似于Rod-Cutting问题,这是动态编程的一个着名示例。

  

我有一个简单的递归解决方案,但我想知道是什么   我们可以实现的最佳时间复杂度?

天真评论的时间复杂度为O(2^n)O(n²)使用动态编程。

答案 1 :(得分:1)

解释

dp[k]表示以最佳方式销售k苹果的利润

profit[k]一次性销售k苹果的利润。

递归关系

显然,dp[0] = 0

然后我们可以定义一个递归关系如下:

dp[k] = max{dp[i] + profit[k - i]}, where 0 <= i < k

您对计算dp[n]感兴趣。

结论

您可以使用自下而上的方法或memoization轻松实现它,这两种方法都非常简单。

此解决方案的时间复杂度为O(n^2),因为计算dp数组中的单个条目需要O(n)时间。

答案 2 :(得分:1)

是的,它非常类似于切杆问题。所以,DP解决方案是 P [i] = MAX(S i ,k = 1..i MAX(P [k] + P [i-k])) Max i = 1到n P [i]给出答案 S i =来自给定数组的i apple的价格 运行时间:O(n)
无法对以前的评论发表评论,因为它需要50级而且我刚加入。

相关问题