AcWing 1058. 股票买卖 V 简单多维DP
原题链接
中等
作者:
皓首不倦
,
2020-07-24 18:08:36
,
所有人可见
,
阅读 482
'''
简单多维DP
'''
N = int(input())
arr = list( map(int, input().split()) )
# dp(i, k)表示在第i天后所有天中做选择,第i天持有状态是k
# (1表示持有,0表示非持有第一天,也就是前一天有卖行为,2表示卖操作已经在两天或者更长以前,也就是当天已经可以进行买操作)
# 的条件下所有选择中总收益的最大值
dp1 = [0]*3
dp2 = [0]*3
for i in range(N-1, -1, -1):
if i == N-1:
dp2[0], dp2[1], dp2[2] = 0, arr[i], 0
else:
dp2[0] = dp1[2]
dp2[1] = max( arr[i]+dp1[0], dp1[1] )
dp2[2] = max( -arr[i]+dp1[1], dp1[2])
dp1, dp2 = dp2, dp1
print( dp1[2] )