class Solution{
public int climbStairs(int n){
if(n<=2) return n;
int []dp=new int[n+1];
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
}
class Solution {
public int rob(int[] nums) {
int n=nums.length;
if(n==0) return 0;
if(n==1) return nums[0];
int []dp=new int[n+1];
dp[0]=0;
dp[1]=nums[0];
for(int i=2;i<=n;i++){
dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]);
}
return dp[n];
}
}
class Solution {
public int rob(int[] nums) {
if(nums.length==0) return 0;
if(nums.length==1) return nums[0];
int []nums1=new int[nums.length];
int []nums2=new int[nums.length];
nums1=Arrays.copyOfRange(nums,0,nums.length-1);//[)
nums2=Arrays.copyOfRange(nums,1,nums.length);
int n1=fun(nums1);
int n2=fun(nums2);
return Math.max(n1,n2);
}
public int fun(int []nums){
int n=nums.length;
int []dp=new int[n+1];
if(n==0) return 0;
dp[0]=0;
dp[1]=nums[0];
for(int i=2;i<=n;i++){
dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]);
}
return dp[n];
}
}