Bootstrap

Leetcode198. 打家劫舍(HOT100)

代码:

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        vector<int> f(n + 1), g(n + 1);

        for (int i = 1; i <= n; i++) {
            f[i] = g[i - 1] + nums[i - 1];
            g[i] = max(f[i - 1], g[i - 1]);
        }
        return max(f[n], g[n]);
    }
};

这种求解最优解问题一般都是dp或者贪心。

 

如图,你可以隔1个以上再选,但是不能相邻房间偷窃。

我们以 f [i] 表示在偷窃第 i 个房间的前提下,我们能获得更多的金钱数。

g[i] 表示在不偷窃第 i 个房间的前提下,我们能获得更多的金钱数。

;