public static void Main()
int[] nums = new int[]{1, 3, 5, 2, 7};
Console.WriteLine(HouseRobberII(nums));
public static int HouseRobberII(int[] nums)
return Math.Max(HouseRobberI(nums, 0, nums.Length-2), HouseRobberI(nums, 1, nums.Length-1));
public static int HouseRobberI(int[] nums, int start, int end)
if(n == 1) return nums[0];
if(n == 2) return Math.Max(nums[0], nums[1]);
dp[start] = nums[start]; dp[start+1] = Math.Max(dp[0], nums[start+1]);
for(int i=start+2; i <= end; i++)
dp[i] = Math.Max(dp[i-2]+nums[i], dp[i-1]);
Console.WriteLine(string.Join(", ", dp));