偷金子
- 输入:houses={3,5,2,10}
- 解释:
–有四间屋子,金子的价值各是3、5、2、10
–偷的时候,不能偷连续的房间 输出15(可以用备忘模型)
memo[id]+memo[id+2]
memo[id]=max{
0+memo[id+1] - 代码:
class LoadRunner
{
public void MainLoadRunner()
{
// memo[id] + memo[id + 2]
//memo[id] = max{
// 0 + memo[id + 1]
int[] houses = { 3, 5, 10 };
int[] memo = new int[houses.Length];//集合只有三个数,树节点也只有三个
for (int i = 0; i < memo.Length; i++)
{
memo[i] = -1;
}
Console.WriteLine(MaxLoadRunner(houses,0,memo));
}
private int MaxLoadRunner(int[] houses, int n, int[] memo)
{
if (n > houses.Length -1 )//如果超出范围为0
{
return 0;
}
if (memo[n] != -1)//如果当前memo[n]有值,兜住
{
return memo[n];
}
int ifSelectedGold = houses[n] + MaxLoadRunner(houses, n + 2, memo);//houses[n](未知到已知)的头
int SelectedGold = MaxLoadRunner(houses, n+1, memo);
memo[n] = ifSelectedGold;
if(memo[n] < SelectedGold)
{
memo[n] = SelectedGold;
}
return memo[n];
}
}