买卖股票的最佳时机


思路分析 :
dp[i][j][0] 表示到第 i 天,交易了 k 支股票,并且手上未持股的最大收益
dp[i][j][1] 表示到第 j 天,交易了 k 支股票,并且手上持股的最大收益
代码分析 :
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
int dp[1005][105][2];
memset(dp, 0, sizeof(dp));
int n = prices.size();
dp[0][0][0] = 0; dp[0][0][1] = -999999;
// printf("n = %d \n", n);
prices.push_back(0);
for(int i = n; i > 0; i--) prices[i] = prices[i-1];
for(int i = 1; i <= n; i++) {
dp[i][0][0] = 0;
dp[i][0][1] = max(-prices[i], dp[i-1][0][1]);
}
for(int i = 1; i <= k; i++) dp[0][i][0] = dp[0][i][1] = -9999999;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= k; j++){
dp[i][j][0] = max(dp[i-1][j-1][1]+prices[i], dp[i-1][j][0]);
dp[i][j][1] = max(dp[i-1][j][0]-prices[i], dp[i-1][j][1]);
}
}
int ans = 0;
for(int i = 1; i <= k; i++){
ans = max(ans, dp[n][i][0]);
// ans = max(ans, dp[n][i][1]);
}
return ans;
}
};
东北日出西边雨 道是无情却有情

浙公网安备 33010602011771号