
详细思路
只能买一次
精确定义
dpi j第i天,0无股票1有股票,利润最大,dp0是空,dp1是第一天
转移
7 1 5 3 6 4
dp i 0=max(dp i-1 0, dp i-1 1 +val ) dpi 1=max(dpi-1 1, -val)
初始化
踩过的坑
只能买一次,所以dpi 1不能从dpi 0过来,否则会多次,而要从-val过来
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],-prices[i-1]); } return dp[n][0]; } };
详细思路
状态压缩,把所有i变为i%2,因为只需要i i-1 不需要i-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],-prices[i-1]); } return dp[n%2][0]; } };
浙公网安备 33010602011771号