赞
踩
笔试时用的 dfs 加普通剪枝 55%(贪心只能过 36%),笔试后琢磨了下动态规划,解出来了,妈的,思路变一下,简单的要死,这应该算背包九讲里的泛化背包问题了。
令 mem[j] 为 i 价值时存储的最大攻击力数值,每个卡牌遍历更新一遍 mem。复杂度 O ( N 2 ) O(N^2) O(N2)
def solve2(m): n = len(m) mem = defaultdict(int) mem[0] = 1 ans = 0 for i in range(n): for k, v in list(mem.items()): if m[i] == 0: mem[k + v] = max(mem[k + v], v) ans = max(k + v, ans) else: mem[k // 2] = max(mem[k // 2], v + 1) # mem[k // 2] = max(mem[k // 2], v + 1) return ans ```
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。