题目描述:
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题分析:
使用 dp[i][0] 表示第 i 天手里没有股票,那么递推方程可以是 p[i][0]=max(dp[i-1][0], prices[i]+dp[i-1][1]); 其中 dp[i-1][0] 表示第 i-1 天手里没有股票,prices[i]+dp[i-1][1] 表示第 i-1 天手里有股票,但是在第 i 天卖掉。同理可以解释 dp[i][1]=max(dp[i-1][1], -prices[i]+dp[i-1][0]);
class Solution {
public:
int maxProfit(vector<int>& prices) {
int size=prices.size();
if(size<2)
return 0;
int dp[size][2];
dp[0][0]=0; dp[0][1]=-prices[0];
for(int i=1; i<size; ++i){
dp[i][0]=max(dp[i-1][0], prices[i]+dp[i-1][1]);
dp[i][1]=max(dp[i-1][1], -prices[i]+dp[i-1][0]);
}
return dp[size-1][0];
}
};