class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算最大收益
* @param prices int整型vector 股票每一天的价格
* @return int整型
*/
/*
dp(i)表示第i天结束后,最多赚dp(i)钱。
dp(i,0) 表示i天结束后,手中还有0只股票
dp(i,0) = max(dp(i-1, 1) + price(i), dp(i-1, 0))
dp(i,0) 表示i天结束后,手中还有1只股票
dp(i,0) = max(dp(i-1, 0) - prices(i), dp(i-1,1);
*/
int maxProfit(vector<int>& prices) {
int len = prices.size();
if (len == 0 || len == 1) {
return 0;
}
vector<vector<int>>dp(len, vector<int>(2, 0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for (int i = 1; i < len; i++) {
dp[i][0] = max(dp[i-1][1] + prices[i], dp[i-1][0]);
dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1]);
}
return dp[len-1][0];
}
};