
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;
}
};