📅  最后修改于: 2023-12-03 15:42:20.997000             🧑  作者: Mango
有一个长度为 $n$ 的序列 $a$,其中 $a_i$ 表示第 $i$ 天的股票价格。现在你有一个初始资金 $x$,你可以选择在任意一天买入一支股票,也可以选择在任意一天卖出手中的股票,也可以选择不进行任何操作。但是你最多只能持有一支股票,即手中最多只有一支股票,且在进行任何操作时手中必须有没有卖出的股票。请求出在经过若干次操作后,你最多能拥有的资金是多少。
我们可以用一个 $dp$ 数组来记录每一天结束后,手上是否持有股票的情况下所获得的最大资金数量。设 $dp_i^0$ 表示第 $i$ 天结束时手中没有股票的情况下所获得的最大资金数量,$dp_i^1$ 表示第 $i$ 天结束时手中持有一只股票的情况下所获得的最大资金数量。
在第 $i$ 天结束时,手中没有股票则有两种情况:
在第 $i$ 天结束时,手中持有一只股票则有两种情况:
最终,最多能拥有的资金就是 $dp_n^0$。
def max_profit(n: int, x: int, a: List[int]) -> int:
dp_0, dp_1 = [0] * (n + 1), [-0x7fffffff] * (n + 1)
for i in range(1, n + 1):
dp_0[i] = max(dp_0[i - 1], dp_1[i - 1] + a[i - 1])
dp_1[i] = max(dp_1[i - 1], dp_0[i - 1] - x - a[i - 1])
return dp_0[n]