3573. 买卖股票的最佳时机 V
题目链接:3573. 买卖股票的最佳时机 V
代码如下:
classSolution{public:longlongmaximumProfit(vector<int>&prices,intk){intn=prices.size();vectormemo(n,vector<array<longlong,3>>(k+1,{LLONG_MIN,LLONG_MIN,LLONG_MIN}));// LLONG_MIN 表示还没有计算过//在[0,i]中完成至多j笔交易,第i天(结束时)的状态为end_state的情况下的最大收益//0=未持有股票,1=持有股票,2=做空中autodfs=[&](auto&&dfs,inti,intj,intend_state)->longlong{if(j<0){returnLLONG_MIN/2;//除以2防止移除}if(i<0){returnend_state?LLONG_MIN/2:0;}longlong&res=memo[i][j][end_state];if(res!=LLONG_MIN){returnres;}intp=prices[i];if(end_state==0){returnres=max({dfs(dfs,i-1,j,0),dfs(dfs,i-1,j,1)+p,dfs(dfs,i-1,j,2)-p});}if(end_state==1){returnres=max({dfs(dfs,i-1,j,1),dfs(dfs,i-1,j-1,0)-p});}returnres=max(dfs(dfs,i-1,j,2),dfs(dfs,i-1,j-1,0)+p);};returndfs(dfs,n-1,k,0);}};