ACWing状态机DP相关问题 1057. 股票买卖 IV

'''
多维DP
'''

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])

猜你喜欢

转载自blog.csdn.net/xiaohaowudi/article/details/107719624