Leetcode 3186. Maximum Total Damage With Spell Casting

  • [Leetcode 3186. Maximum Total Damage With Spell Casting](#Leetcode 3186. Maximum Total Damage With Spell Casting)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题就是一个简单的动态规划的题目,我们只需要考虑每一个位置上的元素取或者不取即可:

  • 如果不取,直接考察下一个元素即可;
  • 如果取,考察能够获得的damage的值加上下一个可行的位置上进行考察即可。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def maximumTotalDamage(self, power: List[int]) -> int:
        power = sorted(Counter(power).items())
        n = len(power)
        
        @lru_cache(None)
        def dp(idx):
            if idx >= n:
                return 0
            nxt = idx
            while nxt < n and power[nxt][0] <= power[idx][0]+2:
                nxt += 1
            return max(dp(idx+1), power[idx][0] * power[idx][1] + dp(nxt))
        
        return dp(0)

提交代码评测得到:耗时1849ms,占用内存249.1MB。

相关推荐
苦藤新鸡10 小时前
16.求数组除了当前元素的所有乘积
算法·leetcode·动态规划
开开心心_Every11 小时前
无广告输入法推荐:内置丰富词库免费皮肤
服务器·前端·学习·决策树·edge·powerpoint·动态规划
筵陌1 天前
算法:动态规划
算法·动态规划
企业对冲系统官2 天前
基差风险管理系统日志分析功能的架构与实现
大数据·网络·数据库·算法·github·动态规划
Snow_day.2 天前
有关平衡树
数据结构·算法·贪心算法·动态规划·图论
百度搜不到…2 天前
背包问题递推公式中的dp[j-nums[j]]到底怎么理解
算法·leetcode·动态规划·背包问题
CoderCodingNo2 天前
【GESP】C++六级考试大纲知识点梳理, (5) 动态规划与背包问题
开发语言·c++·动态规划
Ethan-D2 天前
每日一题#21 二维 DP + 计数类
java·python·算法·leetcode·动态规划
七夜zippoe2 天前
Python算法优化实战:时间与空间复杂度的艺术平衡
开发语言·python·算法·贪心算法·动态规划·复杂度
2501_901147833 天前
动态规划在整除子集问题中的应用与高性能实现分析
算法·职场和发展·动态规划