LeetCode198 - House Robber

本文介绍了一种使用动态规划算法解决特殊抢劫问题的方法。通过构建动态数组并找到状态转移方程,实现遍历数组,使非相邻元素相加达到最大值。文章详细解释了状态转移方程的推导过程,并提供了C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

题目还是个有关抢劫的应用题,太逗了。。。

翻译过来就是遍历数组,元素相加,且相邻的元素不能求和,最后返回遍历后的最大值。

input: [1, 2, 3, 1],可能的情况为 1 + 3、1 + 1、 2 + 1,所以output: 4

 

思路解析:

第一反应便是动态规划问题,因为之后的情况与之前的情况有关。那边需建立动态数组,并找到状态转移方程

动态数组StolenMoney[i],表示偷完第 i 个房子后,已偷到的钱数。

通过举个例子来找到状态转移方程,如题目描述中的例子input: [1, 2, 3, 1]。偷完第1个,钱数为1--->>因为不能连续偷两个,即需要比较第1个房子和第2个房子的钱数然后取舍,偷完第2个,钱数为2--->>第3个房子,就需要将第1个钱数+第3个钱数与第2个钱数做比较,取最大的值。如此类推,所以:

状态转移方程 StolenMoney[i] = max(StolenMoney[i-2] + nums[i], StolenMoney[i-1]),即在第 i 个房子时,已偷钱数为第i-2房子时已偷钱数+第 i 个房子的存钱数  和 第 i - 1房子中已偷钱数比较取大值。

 

代码实现:

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.empty())   return 0;    
        if (nums.size() == 1)   return nums[0];
        if (nums.size() == 2)   return max(nums[0], nums[1]);  
        
        // define dynamic arrays
        int StolenMoney[nums.size()];
        StolenMoney[0] = nums[0];
        StolenMoney[1] = max(nums[0], nums[1]);
        
        for (int i = 2; i < nums.size(); i++) {
            StolenMoney[i] = max(StolenMoney[i-2] + nums[i], StolenMoney[i-1]);
        }
        return StolenMoney[nums.size() - 1];
    }
};

学习内容:

继续练习动态规划思想

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值