版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smmyy022/article/details/83178525
题解类型
这里有一篇极尽完美的足以秒杀所有 stock buy&sell 类型的题解,写的非常完善。
给出我觉得重要的点:
T[ i, k, b ] 表示到i位为止交易k次情况下 是否(b=0 or 1)持有股票时获得最大收益
- 边界条件
T[-1][k][0] = 0, T[-1][k][1] = -Infinity
T[i][0][0] = 0, T[i][0][1] = -Infinity
- 迭代式
// 卖出 or keep
T[i][k][0] = max(T[i-1][k][0], T[i-1][k][1] + prices[i])
// 买入 or keep。 特别记 买入消耗一次交易次数
T[i][k][1] = max(T[i-1][k][1], T[i-1][k-1][0] - prices[i])// here k-1
Code
int maxProfit(vector<int>& prices, int fee) {
int t_i0,t_i1;
t_i0=0;
t_i1=-99999;
for(int p:prices){
int old_ti0 = t_i0;
t_i0=max(t_i0,t_i1+p-fee);
t_i1=max(t_i1,old_ti0-p);
}
return t_i0;
}