题源:leetcode

链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/

 

买卖股票的最佳时机II_动态规划

 

 

动态规划

考虑当天有股票和没有股票两种情况进行讨论:

dp[i][0]=max{dp[i1][0],dp[i1][1]+prices[i]} 没有股票

dp[i][1]=max{dp[i1][1],dp[i1][0]prices[i]} 有股票

 

 

最后获利最多的结果就是dp[size-1][0]

 

 1 class Solution {
 2 public:
 3     int maxProfit(vector<int>& prices) {
 4         int n=prices.size();
 5         int dp[n][2];
 6         dp[0][0] = 0;
 7         dp[0][1] = -prices[0];
 8         for(int i = 1;i<n;i++){
 9             dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i]);
10             dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i]);
11         }
12         return dp[n-1][0];
13     }
14 };