import java.util.*;


public class Solution {
   
   //f[i] 表示该位置必选时最打金额
   //g[i] 表示该位置不选时最大金额
    public int rob (int[] nums) {
        // write code here

        int n = nums.length;
        int[] f= new int [n]; //必选
        int[] g = new int [n]; //不选
        //1.初始化 必选为发nums[0]
        f[0] = nums[0];
        g[0] = 0; 

        //2.填表 1.必选时,此时的值即为g[i-1](表示i-1不选) + nums[i]。2、不选i时,就要看i-1位置选或者不选两种状态
        for(int i=1;i<n;i++ ){
            f[i] = g[i-1] +nums[i]; //必选

            //i-1位置选或者不选两种情况
            g[i] = Math.max(f[i-1],g[i-1]);
        }
    

        return Math.max(g[n-1],f[n-1]);
    }
}