打家劫舍ii 房子连成一个圈

本文介绍了一个名为Solution的C++类,用于解决爬楼梯问题的动态规划方法。通过`qiuDp`函数,计算从开始到末尾的最大步数,以求解给定整数数组中爬楼梯的最大步数。在`main`函数中展示了如何使用这个类解决9级楼梯问题。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <queue>
using namespace std;
class Solution
{
public:
    int rob(vector<int> &nums)
    {
        if (nums.size()==0)
        {
            return 0;
        }
        if (nums.size()==1)
        {
            /* code */
            return nums[0];
        }
        if (nums.size()==2)
        {
            /* code */
            return max(nums[0],nums[1]);
        }
        if (nums.size()==3)
        {
            /* code */
            return max(max(nums[0],nums[1]),nums[2]);
        }
        return max(qiuDp(0,nums.size()-1,nums),qiuDp(1,nums.size(),nums));
    }
    int qiuDp(int begin,int end,vector<int>& nums){
        vector<int> dp(nums.size()-1,0);
        dp[0]=nums[begin];
        dp[1]=max(nums[begin],nums[begin+1]);
        for (int i = 2; i < nums.size()-1; i++)
        {
            dp[i]=max(dp[i-1],dp[i-2]+nums[i+begin]);
        }
        return dp[nums.size()-2];
    }
};

int main()
{
    Solution s;
    cout << s.climbStairs(9);
    cout << endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值