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。

相关推荐
_dindong1 天前
动规:回文串问题
笔记·学习·算法·leetcode·动态规划·力扣
是那盏灯塔1 天前
【算法】——动态规划算法及实践应用
数据结构·c++·算法·动态规划
橘颂TA2 天前
【剑斩OFFER】算法的暴力美学——将 x 减到零的最小操作数
c++·算法·leetcode·动态规划
十八岁讨厌编程2 天前
【算法训练营Day30】动态规划part6
算法·动态规划
Espresso Macchiato2 天前
Leetcode 3702. Longest Subsequence With Non-Zero Bitwise XOR
leetcode medium·异或操作·leetcode 3702·leetcode周赛470
_dindong2 天前
动规:01背包
数据结构·笔记·学习·算法·leetcode·动态规划·力扣
Espresso Macchiato3 天前
Leetcode 3694. Distinct Points Reachable After Substring Removal
滑动窗口·leetcode medium·leetcode双周赛166·leetcode 3694
Espresso Macchiato3 天前
Leetcode 3698. Split Array With Minimum Difference
leetcode medium·分类讨论·leetcode周赛469·leetcode 3698
Espresso Macchiato3 天前
Leetcode 3700. Number of ZigZag Arrays II
动态规划·leetcode hard·矩阵乘法·leetcode 3700·leetcode周赛469
未知陨落4 天前
LeetCode:84.完全平方数
算法·leetcode·动态规划