Base case 就是把没有实际意义的状态先设置好,具体可以看你怎么遍历的,没遍历到的都是Base case。
class Solution { public: int maxProfit(int k, vector<int>& prices) { int n=prices.size(); int dp[n+1][k+1][2]; for(int i=0;i<=k;i++){//第0天的情况 dp[0][i][0]=0; dp[0][i][1]=-1e9; } for(int i=0;i<=n;i++){//交易次数是0的情况 dp[i][0][0]=0; dp[i][0][1]=-1e9; } for(int i=1;i<=n;i++){ for(int j=1;j<=k;j++){ dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]+prices[i-1]); dp[i][j][1]=max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i-1]); } } return dp[n][k][0]; } };
class Solution { public: int maxProfit(vector<int>& prices) { int n=prices.size(); int dp[n+1][3]; dp[0][0]=0; dp[0][1]=-1e9; dp[0][2]=-1e9; for(int i=1;i<=n;i++){ dp[i][0]=max(dp[i-1][0],dp[i-1][2]); dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i-1]); dp[i][2]=dp[i-1][1]+prices[i-1]; } return dp[n][0]>dp[n][2]?dp[n][0]:dp[n][2]; } };
class Solution { public: int maxProfit(vector<int>& prices, int fee) { int n=prices.size(); int dp[n+1][2]; dp[0][0]=0; dp[0][1]=-1e9; for(int i=1;i<=n;i++){ dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i-1]-fee); dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i-1]); } return dp[n][0]; } };