描述
假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。
给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱 在不触动报警装置的情况下。
样例
给定 [3, 8, 4]
, 返回 8
.
状态方程:f[n]=max(f[n-1],f[n-2]+money[n]);
n表示第n个房子,n-1表示上一个房子,n-2表示上上一个房子。
f[n]表示打劫前n个房子所获得的最大金额。
代码
<span style="font-size:18px;">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 her
int len=A.length;
if(A==null||len==0)
return 0;
long res[]=new long[len];
//res[i]表示打劫前i个房子获得的最大金额
for(int i=0;i<len;i++){
if(i==0)
res[i]=A[0];
if(i==1)
res[i]=Math.max(A[0],A[1]);
else if(i>1)
res[i]=Math.max(res[i-1],res[i-2]+A[i]);
}
return res[len-1];
}
}</span>