AcWing 1057. 股票买卖 IV
题目
给定一个长度为
设计一个算法来计算你所能获取的最大利润,你最多可以完成
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。
输入格式
第一行包含整数
第二行包含
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例1:
3 2
2 4 1
输出样例1:
2
输入样例2:
6 2
3 2 6 5 0 3
输出样例2:
7
样例解释
样例1:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。
样例2:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。共计利润 4+3 = 7.
题解
状态表示: f[i][k][] 前i个股票第k笔交易的所有方案(0表示没有持有股票,1表示持有)
f[i][k][0] 前i个股票第k笔交易完成
f[i][k][1] 前i个股票第k笔交易完成,正在进行第k + 1次交易(持有)
属性: 最大利润
状态计算: f[i][k][0] 可以由f[i - 1][k - 1][1] + w[i] 、f[i - 1][k][0]转换而来
f[i][k][1] 可以由f[i - 1][k][0] - w[i]、f[i - 1][k][1] 转换而来
1 |
|
评论