给出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美元。
我有一个简单的递归解决方案,但我想知道我们可以实现的最佳时间复杂度是多少?是否有适用动态编程或记忆的范围?
谢谢!
答案 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级而且我刚加入。