计算最大利润的代码
Posted
技术标签:
【中文标题】计算最大利润的代码【英文标题】:Code for calculating max profit 【发布时间】:2016-10-06 05:59:37 【问题描述】:最近我在 IARCS 网站上遇到了this 问题。
我解决这个问题的方法是,Ramu 必须在某一天交易或什么都不做,因为他只能养 1 头水牛,如果他有 1 头水牛,他必须卖掉,如果没有,他必须买。如果我可以计算所有可能的组合,我可以很容易地确定他的最高利润。但是我的代码似乎无法正常工作,它提供的输出比预期的要高一些,并且有时会卡在更大的测试用例中,在尝试了 3 天之后,有人可以指导我走正确的道路吗?
这是我的代码:
#include <iostream>
int bestTrade(int arr[], int size, bool toTrade, int visits, int day)
if (day < size - 1)
day = day + 1;
if (visits > 0)
if (visits % 2 == 0)
int visitsT = visits - 1;
int trade = bestTrade(arr, size, true, visitsT, day) - arr[day];
int nothing = bestTrade(arr, size, false, visits, day);
if (nothing > trade)
return nothing;
else
return trade;
else
int visitsT = visits - 1;
int trade = bestTrade(arr, size, true, visitsT, day) + arr[day];
int nothing = bestTrade(arr, size, false, visits, day);
if (nothing > trade)
return nothing;
else
return trade;
else
return 0;
else
return 0;
int main(int argc, char const* argv[])
int n, k;
std::cin >> n >> k;
int market[n];
for (int i = 0; i < n; i++)
std::cin >> market[i];
k = (k / 2) * 2;
int maxProfitT = bestTrade(market, n, true, k--, 0);
int maxProfitN = bestTrade(market, n, false, k, 0);
if (maxProfitN > maxProfitT)
std::cout << maxProfitN << std::endl;
else
std::cout << maxProfitT << std::endl;
return 0;
【问题讨论】:
我通过重新格式化程序运行了您的代码以使其更具可读性:format.krzaq.cc 您应该考虑使用其中列出的样式之一。 cmets 也.. 堆栈溢出是为了询问具体问题而不是“我有点迷路”。如果您有具体问题,请提出,但这可能会因为过于宽泛而被关闭。 什么意思?我已经提供了 看看这个链接。它可能会帮助你。 geeksforgeeks.org/… 【参考方案1】:关于dynamic programming
的任何问题,可以这样想:
如果您知道截至(i-1)th
日最多k
笔交易的最大利润,您能否算出截至ith
日最多k
笔交易的最大利润?
想想……答案是Yes
!!!!
比如说,在(i-1)th
之前最多k
交易的最大利润是best(k,i-1)
。您需要找出best(k,i)
来获取任何i<n
。
如果您选择在i-th
日不进行任何交易,则best(k,i)
与best(k,i-1)
相同。如果你确实想做一笔交易,那么best(k,i)
= max(value[i] - value[j] + best[k-1][j]), j from 0 to i`
所以,最后DP
公式变成了:
best[k][i] = max(best[k][i-1], max(value[i] - value[j] + best[k-1][j]), j<i
)
对于工作代码,您可以查看here
希望对你有帮助!!!
【讨论】:
谢谢伙计,在我花了几个小时在笔记本上工作并通过绘制表格浪费页面之后,它完成了我的工作。以上是关于计算最大利润的代码的主要内容,如果未能解决你的问题,请参考以下文章
2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(
2021-07-05:股票问题2。给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖
2021-07-07:股票问题4。给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成(
2021-07-08:股票问题5。给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票)