动态规划算法8
LeetCode 123 买卖股票的最佳时机-iii 2023.12.13
题目链接 代码随想录讲解[链接]
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 ] ;
}
LeetCode 188 买卖股票的最佳时机-iv 2023.12.13
题目链接 代码随想录讲解[链接]
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 ] ;
}