一、穷举框架
思路一层 for 循环 dp [][] 保存每一个步骤的状态,应该是两层 for 循环的。
二、子问题公式
dp [i] 与 dp [i-1] 与 prices [i](当前的价格)之间的关系?这是要去思考的?
sell[i] = max ( sell[i-1] + profit, rest[i-2] + profit, 0 );
rest[i] = max ( sell[i-1], rest[i-1]);
三种状态,但是有一种状态没有必要去考虑的
代码部分:
public class Solution {
public int maxProfit(int[] prices) {
if(prices.length < 2) return 0;
int n = prices.length, max;
int[] sell = new int[n];
int[] rest = new int[n];
sell[0] = 0;
sell[1] = Math.max(prices[1] - prices[0], 0);
for(int i = 2; i < sell.length; i++){
int profit = prices[i]-prices[i-1];
sell[i] = Math.max(Math.max( sell[i-1], rest[i-2] ) + profit, 0);
rest[i] = Math.max(sell[i-1], rest[i-1]);
}
return Math.max(sell[n-1], rest[n-1]);
}
}