打劫房屋 I
思路:
采用动态规划思想,小偷从第一个房子开始依次向后移动,设截止到第i个房子时的最大获利为f(i)。
移动到第 i 个房子时,有两种选择:打劫第i个房屋,则第i-1个房子不能打劫,因此截止目前获利为 money[ i ] + f(i-2);不打劫第i个房子,则第i-1个房子可以打劫,所以截止目前获利为f(i-1)。到底要不要打劫第i个房子取决于二者获利谁更大,所以有f[n]=max( f[n-1], f[n-2]+money[n] )。
代码:
public class Solution {
/**
* @param A: An array of non-negative integers
* @return: The maximum amount of money you can rob tonight
*/
public long houseRobber(int[] A) {
// write your code here
int n = A.length;
if(n == 0)
return 0;
if(n == 1)
return A[0];
long[] dp = new long[n];
dp[0] = A[0]; //打劫至第一个房子的最大收益