Atcoder abc326
https://atcoder.jp/contests/abc326
G - Unlock Achievement
n个技能 初始等级1
m个成就
第$i$个成就需要 $\forall j, \mathrm{level_j} \ge L_{i,j}$ 就可达成,获得$A_i$奖励
而第i个技能的 每升级一级等级需要$C_i$代价
求最大 奖励减去代价
n,m 50
$L_{i,j} \leq 5$
$A_i,C_i\in [1,10^6]$
2s
1024mb
我的思路
如果确定了成就达成,那么对应的技能提升也就是 对应的技能等级的max
也就是给定了成就达成,需要O(NM) 完成计算 奖励减去代价
而注意到 ai都是正数,所以 如果指定了成就, 即使升级技能达成了额外成就,这样只会比当前的 结果更大,
如果 for 所有成就达成组合, ans=max(ans,计算代价()), 那么忽略额外达成的成就不会影响结果
然后发现这里没有用到的是 Li,j <= 5
然而似乎li,j = 1 or 2都没有特别的思路
如果n更小,且 lij被限制在1/2, 那么
可以dp[前i个成就][mask 技能] = 最大收入和
而n 现在范围有50,而且 lij 是[1,2,3,4,5] 所以 这种 状态会有
dp[前i个成就][技能需求state 5^n] = 最大收入和
1 | 5^50 = 88817841970012523233890533447265625 |
1 | 2^25 = 3355'4432 |