设计状态(要点):从房号为0的房子偷到房号为i的房子时,所得的最大金额。
决策对象:要偷,不要偷
建立状态转移方程:f[i] = f[i-2] + nums[i] > f[i-1] ? f[i-2] + nums[i] : f[i-1] ;//f代表最大金额
含义:
偷则前一间房子就不能计划去偷了,则此时最大金额为本间房子的钱加上前前一间时的最大金额
不偷,最大金额不变,此时在本间房子的最大金额等于上一间时的最大金额
int rob(int* nums, int numsSize) {
int i;//代表房号(房号从0开始)
int f[101];
f[0]=nums[0];
if(numsSize>1)
{
f[1]=nums[0]>nums[1] ? nums[0]:nums[1];
}
for (i=2;i<numsSize;i++)
{
f[i]=f[i-2]+nums[i]>f[i-1]? f[i-2]+nums[i]:f[i-1];
}
return f[numsSize-1];
}