题目链接 代码随想录讲解[链接] int  maxProfit ( vector< int > &  prices)  { vector< vector< int >>  dp ( prices. size ( ) ,  vector < int > ( 4 ,  0 ) ) ; dp[ 0 ] [ 0 ]  =  - prices[ 0 ] ; dp[ 0 ] [ 2 ]  =  - prices[ 0 ] ; for  ( int  i =  1 ;  i <  prices. size ( ) ;  i++ ) { dp[ i] [ 0 ]  =  max ( dp[ i- 1 ] [ 0 ] ,  - prices[ i] ) ; dp[ i] [ 1 ]  =  max ( dp[ i- 1 ] [ 1 ] ,  dp[ i- 1 ] [ 0 ] + prices[ i] ) ; dp[ i] [ 2 ]  =  max ( dp[ i- 1 ] [ 2 ] ,  dp[ i- 1 ] [ 1 ] - prices[ i] ) ; dp[ i] [ 3 ]  =  max ( dp[ i- 1 ] [ 3 ] ,  dp[ i- 1 ] [ 2 ] + prices[ i] ) ; } return  dp[ prices. size ( ) - 1 ] [ 3 ] ; 
} 
题目链接 代码随想录讲解[链接] int  maxProfit ( int  k,  vector< int > &  prices)  { vector< vector< int >>  dp ( prices. size ( ) ,  vector < int > ( 2 * k,  0 ) ) ; for  ( int  i =  0 ;  i <  2 * k;  i +=  2 ) dp[ 0 ] [ i]  =  - prices[ 0 ] ; for  ( int  i =  1 ;  i <  prices. size ( ) ;  i++ ) { for  ( int  j =  0 ;  j <  2 * k;  j +=  2 ) { if ( j ==  0 ) dp[ i] [ j]  =  max ( dp[ i- 1 ] [ j] ,  - prices[ i] ) ; else dp[ i] [ j]  =  max ( dp[ i- 1 ] [ j] ,  dp[ i- 1 ] [ j- 1 ] - prices[ i] ) ; dp[ i] [ j+ 1 ]  =  max ( dp[ i- 1 ] [ j+ 1 ] ,  dp[ i- 1 ] [ j] + prices[ i] ) ; } } return  dp[ prices. size ( ) - 1 ] [ 2 * k- 1 ] ; 
}