如果没有元素反应那么我们可以使用贪心策略每次选取最大的攻击进行攻击即可。现在有了元素反应我们考虑怎么利用这个反应使得总伤害最大化。我们可以考虑使用动态规划来解决这个问题。设 $fij01$ 表示前 $i$ 次攻击最后一个攻击为火元素冰元素攻击对附着元素为火元素冰元素的怪物带来的最大伤害。转移方程为:$$fij0 = maxfi-1j0fi-1j1+2cdot bj$$$$fij1 = maxfi-
n, m, k = map(int, input().split())
a = [0] * (n+1) # 存储每次攻击的伤害
b = [0] * (m+1) # 存储每种元素的攻击力
for i in range(1, n+1):
a[i] = int(input())
for i in range(1, m+1):
b[i] = int(input())
f = [[[0]*2 for _ in range(m+1)] for _ in range(n+1)] # 初始化动态规划数组
for i in range(1, n+1):
for j in range(1, m+1):
f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1] + 2*b[j]) # 火元素攻击
f[i][j][1] = max(f[i-1][j][1], f[i-1][j][0] + a[i]) + k # 冰元素攻击
ans = max(f[n][m][0], f[n][m][1]) # 最终答案为两种情况的最大值
print(ans)
时间复杂度:$O(nm)
原文地址: https://www.cveoy.top/t/topic/c1l3 著作权归作者所有。请勿转载和采集!