一个数组,不能选择相邻的数,求最大的选择...这个和上算法课讲过的基本的动态规划例题相似....用ret[i]记录到第i家可能选择的最大收益...初始ret[0]=num[0],ret[1]=max(num[0],num[1])。 对于第i家来说,要么前一家強了,这家不抢;要么前一家不抢,这家抢(因为每家的钱都是非负数,这个值建立在前前家i-2的基础上)
有ret[i] = max(ret[i-1],ret[i-2]+num[i])。
public class Solution {
public int rob(int[] num) {
int len = num.length;
if(len==0)
{
return 0;
}
if(len==1)
{
return num[0];
}
int[] ret = new int[len];
ret[0] = num[0];
ret[1] = Math.max(num[0],num[1]);
for(int i=2;i<len;i++)
{
ret[i] = Math.max(ret[i-1],ret[i-2]+num[i]);
}
return ret[len-1];
}
}