- [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。