[LeetCode] House Robber II 打家劫舍之二

本文介绍了一种解决打家劫舍问题的动态规划算法,通过两个函数RobberHouse和RobberHouseII实现,分别处理不考虑首尾相连和考虑首尾相连的情况。代码使用C++编写,通过递推公式dp[i] = max(vec[i] + dp[i-2], dp[i-1])来更新状态,最后返回dp数组的最后一个元素作为最大抢劫金额。
  1. 简单改一下打家劫舍的一的代码就行了

  2. #include
    #include
    using namespace std;
    int maxT(int a, int b)
    {
    if (a > b)
    {
    return a;
    }
    return b;
    }
    int RobberHouse(vector vec)
    {
    vector dp(vec.size(), 0);
    dp[0] = vec[0];
    dp[1] = maxT(vec[0], vec[1]);
    for (int i = 2; i < vec.size(); i++)
    {
    dp[i] = maxT(vec[i] + dp[i - 2], dp[i - 1]);
    }
    return dp.back();
    }
    int RobberHouseII(vector vec)
    {
    vector vec1(vec.begin(), vec.end() - 1);
    vector vec2(vec.begin() + 1, vec.end());
    return maxT(RobberHouse(vec1), RobberHouse(vec2));
    }
    int main()
    {

    cout << RobberHouse({ 2,7,9,3,1 }) << endl;
    cout << RobberHouseII({ 2,3,2 }) << endl;
    system(“pause”);
    return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值