java 打劫_【JAVA算法题】职业抢劫

题目

/*You are a professional robber planning to rob houses along a street.

* Each house has a certain amount of money stashed,

* the only constraint stopping you from robbing each of them is that

* adjacent houses have security system connected and

* it will automatically contact the police if two adjacent houses were broken into on the same night.

* Given a list of non-negative integers representing the amount of money of each house,

* determine the maximum amount of money you can rob tonight without alerting the police.

**/

/*你是一个职业抢劫犯,打算沿着街道抢劫房子。

* 每个房子都有一定量的存款,唯一的约束阻止你抢它们是相邻的房屋有安全系统连接,

* 它会自动与警方联系,如果两个相邻的房屋被分解成在同一个晚上。

* 给出一个代表每个房子的钱的非负整数的列表,确定今晚你能抢劫的最大金额而不必报警。

**/

代码

动态规划法(重点)

1 //动态规划

2 import java.util.*;3 public classMain {4 public static voidmain(String[] args) {5 Scanner sc = newScanner(System.in);6 int a =sc.nextInt();7 int aa[] = new int[a];8 for(int i=0;i

解析

最优解的问题一般都可以用动态规划算法

动态规划算法:

1.全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解

2.动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解

3.边界条件:即最简单的,可以直接得出的局部最优解

状态转移方程: aa[i] += Math.max(aa[i-2], aa[i-3]); (i>=4)

因为相邻的两个不能一起计算,所以最后还要比较最后一个和倒数第二个的大小以求出最优解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强盗抢劫动态规划是解决打家劫舍问的一种方法。其中有两种常用的解法:自顶向下的动态规划和自底向上的动态规划。 引用中给出的是自顶向下的动态规划解法。该解法利用备忘录来避免重复计算,以提高效率。首先,定义一个备忘录数组memo,存储从每个房子开始抢劫能够获得的最大价值。然后,通过递归函数dp实现动态规划的计算过程。在dp函数中,先判断是否已经计算过该位置的最大价值,如果计算过,则直接返回备忘录中存储的值;如果没有计算过,则根据状态转移方程计算当前位置的最大价值,并将结果存入备忘录中。最后,返回第0间房子开始抢劫能够获得的最大价值。这样就可以通过备忘录的优化来避免重复计算,提高运行效率。 引用中给出的是自底向上的动态规划解法。该解法不使用递归,而是从最后一间房子开始向前计算每个位置的最大价值,直到第0间房子。首先,定义一个dp数组,dp[i表示从第i间房子开始抢劫能够获得的最大价值。然后,从倒数第二间房子开始,通过状态转移方程计算每个位置的最大价值,并将结果存入dp数组中。最后,返回dp即为从第0间房子开始抢劫能够获得的最大价值。 以上就是强盗抢劫动态规划的两种解法。自顶向下的解法利用备忘录来优化,自底向上的解法则通过逐步计算每个位置的最大价值来得到结果。这两种方法都可以有效解决打家劫舍问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [经典动态规划:打家劫舍系列问](https://blog.csdn.net/yeluoxiang/article/details/103775809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值