package main

import "fmt"

func _rob(arr []int) int {
	dp := make([]int, len(arr))
	dp[0] = arr[0]
	//相当于最前面还有一个房子价值=0
	dp[1] = max(arr[0], arr[1]+0)
	for i := 2; i < len(arr); i++ {
		dp[i] = max(dp[i-2]+arr[i], dp[i-1])
	}
	return dp[len(arr)-1]
}

func rob(arr []int) int {
	if len(arr) == 1 {
		return arr[0]
	}
	if len(arr) == 2 {
		return max(arr[0], arr[1])
	}
	return max(_rob(arr[:len(arr)-1]), _rob(arr[1:]))
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

/*
*
假设数组 nums 的长度为 n。
如果不偷窃最后一间房屋,则偷窃房屋的下标范围是 [0,n−2];
如果不偷窃第一间房屋,则偷窃房屋的下标范围是 [1,n−1]

输入:nums = 1 2 3 1
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

输入:1 3 1 3 100
输出:103
*/
func main() {
	//arr := []int{1, 3, 1, 3, 100}
	var num int
	fmt.Scanln(&num)
	arr := make([]int, num)
	for i := 0; i< num; i++{
		fmt.Scan(&arr[i])
	}
	fmt.Println(rob(arr))
}