Leetcode3186. 施咒的最大总伤害

leetcode3186.施咒的最大总伤害 在选择一种咒语后,就不能使用伤害绝对值相差 1 或 2 的咒语。由于答案只与所选的咒语集合相关,而与顺序无关,我们可以按从小到大的顺序进行选择,并将相同伤害的法术看成同一种。已知魔法师使用伤害值为 power[i] 的咒语时,他们就 不能 使用伤害为。可以使用咒语 1,2,3,伤害值分别为 1,6,6,总伤害值为 13。可以使用咒语 0,1,3,伤害值分别为 1,1,4,总伤害值为 6。,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。一个魔法师有许多不同的咒语。 阅读详情

Every day a Leetcode

题目来源:3186. 施咒的最大总伤害

解法1:记忆化搜索

统计每个元素的出现次数,记到哈希表 cnt 中。将哈希表的 key 整理到数组 a 中,把 a 按照从小到大的顺序排序。

定义 dfs(i) 表示从 a[0] 到 a[i] 中选择,可以得到的伤害值之和的最大值。

考虑 a[i] 选或不选:

  • 不选:问题变成从 a[0] 到 a[i−1] 中选择,可以得到的伤害值之和的最大值,即 dfs(i)=dfs(i−1)。
  • 选:那么伤害值等于 a[i]−2 和 a[i]−1 的数不能选,问题变成从 a[0] 到 a[j−1] 中选择,可以得到的伤害值之和的最大值,其中 j 是最小的满足 a[j]≥a[i]−2 的数。那么 dfs(i)=dfs(j−1)+a[i]⋅cnt[a[i]]。

两种情况取最大值,得:dfs(i)=max⁡(dfs(i−1),dfs(j−1)+a[i]⋅cnt[a[i]])。

递归边界:dfs(−1)=0。没有数可以选,伤害值之和为 0。

递归入口:dfs(n−1),即答案。注意这里 n 是 a 的长度,即 power 中的不同元素个数。

代码:

#
# @lc app=leetcode.cn id=3186 lang=python3
#
# [3186] 施咒的最大总伤害
#

# @lc code=start
class Solution:
    def maximumTotalDamage(self, power: List[int]) -> int:
        cnt = Counter(power)
        a = sorted(cnt.keys())

        @cache
        def dfs(i: int) -> int:
            if i < 0:
                return 0
            x = a[i]
            j = i
            while j > 0 and a[j - 1] >= x - 2:
                j -= 1
            res1 = dfs(i - 1) # 不选 a[i]
            res2 = dfs(j - 1) + x * cnt[x] # 选 a[i]
            return max(res1, res2)
        
        return dfs(len(a) - 1)
# @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(nlogn),其中 n 是 power 的长度。

空间复杂度:O(n),其中 n 是 power 的长度。

【C++动态规划 前缀和】3186. 施咒的最大总伤害|1840 一个魔法师有许多不同的咒语。 给你一个数组 power ,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。 已知魔法师使用伤害值为 power[i] 的咒语时,他们就 不能 使用伤害为 power[i] - 2 ,power[i] - 1 ,power[i] + 1 或者 power[i] + 2 的咒语。 每个咒语最多只能被使用 一次 。 请你返回这个魔法师可以达到的伤害值之和的 最大值 。 阅读详情

相关推荐

别再浪费主板上的PCIE插槽了!手把手教你用VL805芯片打造高速USB3.0扩展坞

本文详细介绍了如何利用VL805芯片将主板闲置的PCIE插槽改造为高性能USB3.0扩展坞。从芯片选型、电路设计到焊接工艺和系统调试,提供了一套完整的实战指南,帮助用户充分释放硬件潜能,实现高达5Gbps的传输速度。

weixin_27134495的博客 326

【Leetcode】3186. Maximum Total Damage With Spell Casting

可以先汇总一下每个数出现次数,然后用动态规划求解。问选出数的最大总和是多少。,可以在其中选数,但是如果。

数学、算法爱好者的博客 769

SuperPoint+SuperGlue在HLoc中的实战效果对比:5大公开数据集测试报告

本文在HLoc框架下,对传统SIFT与深度学习组合SuperPoint+SuperGlue在五大公开数据集上的视觉定位效果进行了实战对比测试。报告详细分析了两种方案在Aachen Day-Night、RobotCar Seasons等不同光照、季节及场景下的表现,揭示了SuperPoint+SuperGlue在应对剧烈光照变化和长期外观变化时的显著优势,并提供了基于HLoc模块化设计的选型与配置策略。

weixin_29093169的博客 425

动态规划--Day04--打家劫舍--740. 删除并获得点数,3186. 施咒的最大总伤害,2140. 解决智力问题

动态规划–Day04–打家劫舍–740. 删除并获得点数,3186. 施咒的最大总伤害,2140. 解决智力问题 今天要训练的题目类型是:【打家劫舍】,题单来自@灵艾山茶府。 掌握动态规划(DP)是没有捷径的,咱们唯一能做的,就是投入时间猛猛刷题。 动态规划要至少刷100道才算入门! 记忆化搜索是新手村神器。方便理解,写完之后可以转译成递推。 但是有些题目只能写递推,才能优化时间复杂度。熟练之后直接写递推也可以。

m0_60740070的博客 1034

STM32H750xx【QSPI】轮询方式读写GD25Q64E

本文详细介绍了GD25Q64E其特性、引脚定义及功能说明,重点阐述了在STM32H750平台上通过CubeMX配置QuadSPI接口的步骤,包括时钟设置、参数优化等。文章提供了完整的BSP驱动开发流程,涵盖写使能、四线模式使能、ID读取、解除保护、扇区擦除、整片擦除、页编程和数据读取等关键功能实现,并通过读写测试验证了DummyCycles参数对数据准确性的影响。

honmy18的博客 1422

从CAD到Web:高效转换STEP/IGES模型为GLB格式的实践指南

本文详细介绍了如何将工业设计中的STEP/IGES模型高效转换为Web友好的GLB格式。通过PythonOCC和gltf-pipeline等工具链,实现从CAD到Web的无缝转换,大幅提升模型加载速度和展示效果。文章包含实战案例、优化技巧和常见问题解决方案,帮助开发者快速掌握3D模型转换技术。

weixin_29072299的博客 507

题解/算法 {3186. 施咒的最大总伤害}

1

qq_66485519的博客 341

uni-app:实现APP设置手机闹钟+取消闹钟+响铃重复/文字等,帮用户设置好闹钟并备注文本,uni-app设置安卓系统闹钟和苹果ios系统闹钟(uniapp调用手机上的闹钟,详细示例代码demo)

uniapp设置安卓和iOS闹钟的插件,uni-app设置安卓系统闹钟,uniapp设置苹果ios系统闹钟,uniapp设置定时闹铃的完整解决方案,UniApp设置手机闹钟,uniApp如何设置手机闹铃,uniapp设置闹钟,设置闹钟提醒,uni-app设置安卓系统闹钟_通过uniapp设置原声闹钟,调用android系统闹钟,如何在App中启动系统闹钟,uniapp如何取消闹钟,通过调用ios的原生接口来设置手机闹钟,uni-app 调用手机闹钟功能,uniap调用ios系统闹钟,uniapp调用手机上的

✅ 精选推荐文章 4234

leetcode 3186. 施咒的最大总伤害

动态规划的呢,只要一个数字可以使用,那么它的相同数字都可以使用,所以像 1 1 1 2 2 3 3 可以归类到 {1, 3}, {2, 2}, {3, 2},前者是数字,后者是统计数量。 # 解题过程 > 首先排序的,然后归类的,像数字 1 3,相差两个的,需要首先放入一个 0,1 0 3,这样就可以用位置来代替数字的大小,像数字 1 6,相差>2的,需要放入两个0,1 0 0 6,这样用位置来代替数字的大小。像 1 1 1 3 3 9 9 9 11 11,归类以后就是:{1, 3}, {3, 2},

邹九的个人博客 483

2020年大连理工大学《单片机原理及应用》期末试卷

2020年大连理工大学《单片机原理及应用》期末试卷 此试卷为大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷。 ...

无名何许人的博客 1479

BAT007:批量为当前目录下的文件夹添加前缀或后缀

摘要:编写批处理程序,实现批量为当前目录下的文件夹添加前缀或后缀。

qq_31762031的博客 4052

3186.施咒的最大总伤害解析(LeetCode C++)

本题要求计算魔法师使用咒语的最大总伤害,其中使用伤害值为power[i]的咒语时,不能使用伤害值为power[i]±1或power[i]±2的咒语。以下将以示例为例,详细解析代码执行过程。

sweetikelike的博客 784

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2535

LeetCode 3186. 施咒的最大总伤害【记忆化搜索;动态规划】【值域打家劫舍】

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 1110

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode 3186.施咒的最大总伤害:动态规划+双指针——O(1)空间(暂未发现其他O(1)空间的题解)

LeetCode 3186.施咒的最大总伤害:动态规划+双指针——O(1)空间(暂未发现其他O(1)空间的题解) 一个魔法师有许多不同的咒语。 给你一个数组 power ,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。 已知魔法师使用伤害值为 power[i] 的咒语时,他们就 不能 使用伤害为 power[i] - 2 ,power[i] - 1 ,power[i] + 1 或者 power[i] + 2 的咒语。 每个咒语最多只能被使用 一次 。 请你返回这个魔法师可以达到的

<font color="Pink">Tisfy的博客</font> 849

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【记忆化搜索】【超详细】力扣3186. 施咒的最大总伤害

在实际递归的运算过程中,采用的是深度优先遍历,也就是计算{4,1}的res需要第二层的{3,1}和{1,2}都返回给它一个值,他会先看{3,1}有没有返回给它一个值,发现{3,1}没有返回给它一个值,他就会计算{3,1}的两个子节点的返回值来计算{3,1}的值是多少,他就会先看第三层{1,2}有没有返回给他一个值,发现也没有,就会去计算第三层{1,2}的两个子节点的返回值来计算{1,2}的值,由于第三层的{1,2}是第一个元素了,所以他的两个子节点都只能返回它0。这个标题,就能理解了。

sjsjs11的博客 1158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode 3186.施咒的最大总伤害

可以使用咒语 1,2,3,伤害值分别为 1,6,6,总伤害值为 13。,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。可以使用咒语 0,1,3,伤害值分别为 1,1,4,总伤害值为 6。easy easy 注意开long long。请你返回这个魔法师可以达到的伤害值之和的。一个魔法师有许多不同的咒语。已知魔法师使用伤害值为。每个咒语最多只能被使用。

2302_79344985的博客 168

F.动态规划-入门DP-打家劫舍:3186. 施咒的最大总伤害

F.动态规划-入门DP-打家劫舍:3186. 施咒的最大总伤害解析

要努力去发光,而不是被照亮~ 369

2025-01-18:施咒的最大总伤害。用go语言,一个魔法师掌握了多种不同的咒语,每个咒语对应一个伤害值,这些伤害值存储在数组 power 中,其中可能会有多个咒语具有相同的伤害值。 使用某个特定伤

2025-01-18:施咒的最大总伤害。用go语言,一个魔法师掌握了多种不同的咒语,每个咒语对应一个伤害值,这些伤害值存储在数组power中,其中可能会有多个咒语具有相同的伤害值。使用某个特定伤害值为power[i]的咒语后,魔法师不能再使用伤害值为power[i]-2、power[i]-1、power[i]+1或power[i]+2的任何咒语。此外,每个咒语只能被施放一次。请你计算并返回魔法师能够实现的最大伤害值总和。输入:power=[7,1,6,6]。

福大大架构师每日一题 1万+

3186. 施咒的最大总伤害

3186. 施咒的最大总伤害

weixin_45256307的博客 256

力扣题解:3186,释咒的最大总伤害

可以使用咒语 1,2,3,伤害值分别为 1,6,6,总伤害值为 13。,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。可以使用咒语 0,1,3,伤害值分别为 1,1,4,总伤害值为 6。请你返回这个魔法师可以达到的伤害值之和的。一个魔法师有许多不同的咒语。已知魔法师使用伤害值为。每个咒语最多只能被使用。

yyssas的博客 195

动态规划习题其七【力扣】【算法学习day.29】

##我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!

2301_79232523的博客 486

力扣动态规划-6【算法学习day.100】

##我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!

2301_79232523的博客 326

LeetCode 3186 最大施法伤害

LeetoCode地址: . - 力扣(LeetCode)这道题很直观,玩游戏的都懂,伤害最大化嘛!但是每个法术释放与否可能会影响总体的伤害,因此是从局部最优解找到全局最优解的动态规划问题!禁止释法的区间是+-2,且相同伤害的法术可以释放多次,所以很容易想到,将伤害相同的法术进行计数,并按照伤害的大小进行排序。这样就可以从最小的伤害开始考虑释放与否了。剩下的,直接看代码吧

veatheroe的博客 497
上一篇: Audio Unit 学习笔记 | 基础
下一篇: Leetcode 第 402 场周赛题解
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值