AcWing 1057. 股票买卖 IV 简单多维DP
原题链接
中等
作者:
皓首不倦
,
2020-07-24 16:11:31
,
所有人可见
,
阅读 658
N, K = map(int, input().split())
arr = list( map(int, input().split()) )
# dp(i, j, k)表示在第i天后所有天中做选择,最多买入j次,第i天持有状态是k(1表示持有,0表示非持有)的条件小所有选择中总收益的最大值
dp1 = [[0, 0] for _ in range(K+1)]
dp2 = [[0, 0] for _ in range(K+1)]
for i in range(N-1, -1, -1):
for j in range(K+1):
if j == 0:
dp2[j][0], dp2[j][1] = 0, max(arr[i], dp1[j][1])
else:
if i == N-1:
dp2[j][0], dp2[j][1] = 0, arr[i]
else:
dp2[j][0] = max( -arr[i] + dp1[j-1][1], dp1[j][0] )
dp2[j][1] = max( arr[i] + dp1[j][0], dp1[j][1] )
dp1, dp2 = dp2, dp1
print(dp1[K][0])