
class Solution {public: int massage(vector<int>& nums) { int size = nums.size(); if(size == 0) return 0; if(size == 1) return nums[0]; vector<int> dp(size, 0); dp[0] = nums[0]; //dp[i] 表示nums[0...i] 能得到的最长时间 dp[1] = max(nums[0],nums[1]); for(int i = 2; i < size; i++) { //遍历迄今为止的最大值,两种情况取较大: //1:预约本次,则上一次不预约(dp[i-2] + nums[i]) //2:本次不预约,则值为预约到上一次的最大值 dp[i] = max(dp[i-2] + nums[i], dp[i-1]); } return dp[size -1]; }};

class Solution {public: int rob(vector<int>& nums) { if(nums.size()==0){return 0;} if(nums.size()==1){return nums[0];} if(nums.size()==2){return max(nums[0],nums[1]);} vector<int> dp(nums.size(),0); dp[0]=nums[0]; dp[1]=max(nums[0],nums[1]); for(int i = 2;i<nums.size();i++) { dp[i]=max(dp[i-1],dp[i-2]+nums[i]); } return dp[nums.size()-1]; }};

class Solution {public: int rob(vector<int>& nums) { if(nums.size()==0) return 0; if(nums.size()==1) return nums[0]; if(nums.size()==2) return max(nums[0],nums[1]); if(nums.size()==3) return max(max(nums[0],nums[1]),nums[2]); int n = nums.size(); //0——n-1 vector<int> dp(n-1,0); dp[0]=nums[0]; dp[1]=max(nums[0],nums[1]); for(int i=2;i<dp.size();i++) { dp[i]=max(dp[i-1],dp[i-2]+nums[i]); } //1-n vector<int> dpp(n,0); dpp[1]=nums[1]; dpp[2]=max(nums[2],nums[1]); for(int i=3;i<dpp.size();i++) { dpp[i]=max(dpp[i-1],dpp[i-2]+nums[i]); } return max(dp.back(),dpp.back()); }};

class Solution {
public:
int maxArea(vector<int>& height) {
int res = 0;
int i = 0;
int j = height.size() - 1;
while (i < j) {
int area = (j - i) * min(height[i], height[j]);
res = max(res, area);
if (height[i] < height[j]) {
i++;
} else {
j--;
}
}
return res;
}
};