Say you have an array for which the ith element is the price of a given stock on day i.spa
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) with the following restrictions:rest
Example:code
prices = [1, 2, 3, 0, 2] maxProfit = 3 transactions = [buy, sell, cooldown, buy, sell]
这道题能够用动态规划的思路解决。可是一开始想的时候老是抽象不出状态转移方程来,以后看到了一种用状态机的思路,以为很清晰,特此拿来分享,先看以下状态转移图:blog
这里咱们把状态分红了三个,根据每一个状态的指向,咱们能够得出下面的状态转移方程:ip
这样就清晰了不少。element
1 class Solution { 2 public: 3 int maxProfit(vector<int>& prices){ 4 if (prices.size() <= 1) return 0; 5 vector<int> s0(prices.size(), 0); 6 vector<int> s1(prices.size(), 0); 7 vector<int> s2(prices.size(), 0); 8 s1[0] = -prices[0]; 9 s0[0] = 0; 10 s2[0] = INT_MIN; 11 for (int i = 1; i < prices.size(); i++) { 12 s0[i] = max(s0[i - 1], s2[i - 1]); 13 s1[i] = max(s1[i - 1], s0[i - 1] - prices[i]); 14 s2[i] = s1[i - 1] + prices[i]; 15 } 16 return max(s0[prices.size() - 1], s2[prices.size() - 1]); 17 } 18 };