309. 最佳买卖股票时机含冷冻期
class Solution {
public:
int maxProfit(vector<int>& prices) {
int size=prices.size();
if(size==0) return 0;
vector<vector<int>> dp(size,vector<int>(4,0));
//0:买入,1,:保持卖出,2:卖出,3:冷冻
dp[0][0]=-prices[0];
for(int i=1;i<size;i++){
dp[i][0]=max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][1]-prices[i]));
dp[i][1]=max(dp[i-1][1],dp[i-1][3]);
dp[i][2]=dp[i-1][0]+prices[i];
dp[i][3]=dp[i-1][2];
}
return max(dp[size-1][1],max(dp[size-1][2],dp[size-1][3]));
}
};
714. 买卖股票的最佳时机含手续费
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int size=prices.size();
if(size==0) return 0;
vector<vector<int>> dp(size,vector<int>(2,0));
dp[0][0]=-prices[0];
for(int i=1;i<size;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee);
}
return max(dp[size-1][0],dp[size-1][1]);
}
};
300. 最长递增子序列
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int size=nums.size();
if(size==0) return 0;
vector<int> dp(size,1);
int result=1;
for(int i=1;i<size;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]) dp[i]=max(dp[i],dp[j]+1);
}
if(result<dp[i]) result=dp[i];
}
return result;
}
};