(每日一练66074)题目名称:打家劫舍

文盲老顾
新星创作者: 信息安全技术领域
领域专家: 数据库技术领域
2023-05-19 08:47:25

一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

输入一个正整数n代表房屋的数量(n≤100),接着输入n个非负整数代表每间房屋的现金数量

额。一共最多100个数字,暴力计算即可

n = int(input())
arr = list(map(int,input().split()))
ans = 0
def f(v,r):
    global ans
    if v > ans:
        ans = v
    l = len(r)
    if l == 0:
        return
    f(v + r[0],r[2:])
    if l > 1:
        f(v + r[1],r[3:])
f(0,arr)
print(ans)
...全文
343 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
码分蛋糕 2023-06-02
  • 打赏
  • 举报
回复

要么隔着一家偷,要么隔着两家偷,被偷的最后一家要么是倒数第一家,要么是倒数第二家。跟那个青蛙跳台阶一样的。

文盲老顾 2023-06-02
  • 打赏
  • 举报
回复

今天又碰到这个了,那就来个不那么暴力的

n = int(input())
arr = list(map(int,input().split()))
dp = [0] * n
dp[0] = arr[0]
if n > 1:
    dp[1] = max(arr[:2])
    for i in range(2,n):
        dp[i] = max(dp[i - 1],dp[i - 2] + arr[i])
print(dp[-1])
幻灰龙 2023-06-02
  • 举报
回复
@文盲老顾 赞
yyfhz 2023-05-30
  • 打赏
  • 举报
回复 1

可以不那么暴力的。
假设所有人家都有钱,则
新建数组s[],其中s[i]用来记录从头开始到第i家能抢到的最多钱数
新增指示数组a[],其中a[i]用来记录可以让s[i]成立的所有方案中,最后一家倒霉蛋最靠前的位置(显然了,a[i]要么是i, 要么是i-1)
于是,如果我已经有s[0],...., s[i]以及a[0],...,a[i]的所有值,
则很容易的推导出s[i+1]和a[i+1]。
若a[i]<i,则
s[i+1]=s[i]+arr[i+1]
a[i+1]=i+1
若a[i]=i, 且s[i-1]+arr[i+1]<=s[i]则
s[i+1]=s[i]
a[i+1]=i
若a[i]=i, 且s[i-1]+arr[i+1]>s[i]则
s[i+1]=s[i-1]+a[i+1]
a[i+1]=i+1

一路推算到底,最后的s[N]就是解。
然后考虑到每一步推算的过程中,真正用到的其实只有s[i-1], s[i], a[i-1], a[i]这4个变量,所以新增的数组s[]和a[]可以用4个普通变量来代替以节省空间。

源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

320

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧