house robber
跟基础的动态规划问题的区别是,不能选择相邻的。
如下图,建立方程,用一个opt数组保存就可以。
需要考虑一下数组很小的边界条件。
//
// Created by dd on 2021/12/3.
//
#include<bits/stdc++.h> //万能头文件,包含了目前C++所包含的所有头文件
using namespace std;
int main() {
vector<int> cost = {1, 2, 3, 1};
int n = cost.size();
vector<int> opt(n, 0);
opt[0] = cost[0];
if (n >= 2) opt[1] = max(cost[1], cost[0]); //有些边界情况需要讨论
if (n >= 3) opt[2] = max(cost[0] + cost[2], cost[1]);
for (int i = 3; i < n; i++)
opt[i] = max(cost[i] + opt[i - 2], cost[i - 1] + opt[i - 3]);
cout << opt[n - 1];
return 0;
}