
详细思路
具有某种转移
精确定义
dpij 第i天0无股票1有股票的最大利润,dp0是空dp1是第一天
转移
7 1 5 3 6 4
dp i 0=max(dp i-1 0,dp i-1 1 +val)
dp i 1=max(dp i-1 1,dp i-1 0 -val)
初始化
dp0 0=0;dp01=INT_MIN
class Solution { public: int maxProfit(vector<int>& prices) { int n=prices.size(); vector<vector<int>>dp(n+1,vector<int>(2,-0x3f3f3f3f)); dp[0][0]=0; for(int i=1;i<=n;i++){ dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i-1]); dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i-1]); } return dp[n][0]; } };
状态压缩,只需要i i-1,一维取余2
class Solution { public: int maxProfit(vector<int>& prices) { int n=prices.size(); vector<vector<int>>dp(2,vector<int>(2,-0x3f3f3f3f)); dp[0][0]=0; for(int i=1;i<=n;i++){ dp[i%2][0]=max(dp[(i-1)%2][0],dp[(i-1)%2][1]+prices[i-1]); dp[i%2][1]=max(dp[(i-1)%2][1],dp[(i-1)%2][0]-prices[i-1]); } return dp[n%2][0]; } };
浙公网安备 33010602011771号