注意:没有交叉,第二次购买应晚于第一次销售。
给定一个股票在上一个交易日的报价流。假设它已经按时间排序。通过进行两次交易,找到你可以通过这只股票赚取的最大金额。买入和卖出算作一次交易。
例如:
time Price
1 10
2 11
3 7
4 15
5 8
6 17
7 16
答案是8+9,在3买入,在4卖出,再在5买入,在6卖出。
注意:没有交叉,第二次购买应晚于第一次销售。
给定一个股票在上一个交易日的报价流。假设它已经按时间排序。通过进行两次交易,找到你可以通过这只股票赚取的最大金额。买入和卖出算作一次交易。
例如:
time Price
1 10
2 11
3 7
4 15
5 8
6 17
7 16
答案是8+9,在3买入,在4卖出,再在5买入,在6卖出。
动态规划
d[i][j].b = 第i次交易后的收入,已经完成了j次交易,第j次交易只买入 d[i][j].s = 第i次交易后的收入,已经完成了j次交易,第j次交易买入并卖出 基础值 d[i][j].b = d[i][j].v = -inf; d[0][0].s = 0;
在这种特殊情况下,j仅为1-2
d[i][j].b = max(d[i-1][j-1].s - price[i], d[i-1][j].b)
d[i][j].s = max(d[i-1][j].b + price[i], d[i-1][j].s)
类似这样的内容
O(n*k),其中k是事务数,因此在这种情况下为O(n)