问题
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
问题分析
最多能完成2笔交易,且不能同时参与多笔交易,则说明一次最多只能持有1只股票,并且卖掉后才能卖第二只股票。
状态:
买入股票:0次持有,1次持有,2次持有
卖出股票:0次持有,1次不持有,2次不持有
并且状态转移关系为:
0买0买–>1持有
0买0买 or 1持有–>1不持有
1不持有–>2持有
1不持有 or 2持有–>2不持有
代码
def stock2(prices):
#只允许交易两次
if len(prices)<2:
return 0
dp = [[[0]*3,[0]*3] for _ in range(len(prices))]
#定义dp[i][0][j]不持有股票 j表示第几次不持有股票 的最大利润
#dp[i][1][j]表示持有股票 j表示第几次持有股票 的最大利润
#第1天不可能卖出股票,所以dp[0][0]=0
#第1天买入股票则,手里的利润为dp[0][1][1]=-prices[0] dp[0][1][2]=-prices[0] 买入股票的钱
dp[0][1][1] &#