每日一题day1
题目描述
解题思路
动态规划。
状态定义
- dp[i][0]:第i天不持有股票的最大利润
- dp[i][1]:第i天持有股票的最大利润
状态转移方程
- dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee)
第i天不持有股票最大利润有两种可能:前一天(第i-1天)不持有,或者前一天持有今天卖出了。
- dp[i][1]=max(dp[i-1][0]-prices[i],dp[i-1][1])
第i天持有股票最大利润有两种可能:前一天(第i-1天)持有,或者前一天不持有但今天买入了。
边界条件
- dp[0][0] = 0;
- dp[0][1] = -prices[0];
C++代码
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int dp[50005][2];
dp[0][0] = 0;
dp[0][1] = -prices[0];
int l = prices.size();
for(int i = 1;i < l;i++){
dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);
dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i]);
}
return max(dp[l-1][0],dp[l-1][1]);
}
};