首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最大化总利润

最大化总利润
EN

Stack Overflow用户
提问于 2014-02-23 13:18:57
回答 2查看 95关注 0票数 1

假设汽车的价格每天都在波动,但在任何一天,价格总是一样的。假设一个人在价格低的时候买进,在价格高的时候卖出。

但每天只允许进行以下操作之一。

代码语言:javascript
复制
Buy one car.
Sale all cars that he owns
Do nothing

可以获得的最大金额是多少?

例如:假设我们有N(=3)天,并且每3天的车费是{1,3,70},其中Ci代表ith day.Then的成本,在这种情况下可以得到的最大金额是136。

说明:他可以在头两天买一辆车,第三天可以把两辆车都卖掉。

如何找到最大金额?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-23 13:43:12

让普利切克成为第一天的汽车价格#k

代码语言:javascript
复制
maxP = -inf
for k = last_day downto first_day 
  P = Price[k]
  if P < maxP then
    Action[k] = "Buy one car"
  else
    maxP = P
    Action[k] = "Sale all cars that he owns"
  end if
end for
carsOwned = 0
sumEarned = 0
for k = first_day to last_day
  P = Price[k]
  if Action[k] == "Buy one car" then
    carsOwned += 1
    sumEarned -= P
  else
    sumEarned += P*carsOwned
    carsOwned = 0
  end if
end for
print(sumEarned)

这个解决方案需要O(n)内存和O(n)时间。

票数 2
EN

Stack Overflow用户

发布于 2014-02-23 13:31:23

让我们从显而易见的开始--如果你知道价格是最高的那一天(在你的一系列汽车价格中,每天的最大值的指数),很明显,在那一天之前的最佳行动是每天买一辆车,然后在最大的一天把它们全部卖掉。

因此,解决这一问题的一个算法是找到最大值,在子数组0:index_of_max中计算每天购买一辆汽车并在最大程度上销售的利润,并对剩余的数组重申这一过程。时间复杂度为O(n^2)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21968717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档