CF tracker
Edu List
https://codeforces.com/contest/1612
F. Armor and Weapons
n个盾,m个武器
power = 盾idx + 武器idx
有q个 idx组合是加强的 power = qi(盾idx) + qj(武器idx) + 1(比沒有加強的多1)
初始,(盾1,武器1)
如果想得到 盾k 或者武器k, 那么power 需要>= k
同时只能持有两个, 所以之前得到过但是放弃的不能用于组合 也就是(a,b) -> (a, <= a+b+(?1)) or ( <= (a+b+?1), b)
问(1,1) -> (n,m) 的最小次数
范围
n,m 2e5
q 2e5
2s 512mb
我的思路
dp[m][n] = min(dp[m][n-m ~ n-1],dp[m][n-m-1] if (m,n-m-1)在q中)
, 对于另一侧固定,类似的
从小到大 的角度, 在沒有q的情況,就是(1,1) -> (1,2) -> (3,2) -> (3,5) -> (8,5)
這樣是最快的
如何處理有q的?
如果没有上界 (a,b)->(a,a+b+1)
, 那么如果继续固定a, 那么显然 (a,a+b+1)
不会比(a,a+b)
差, 因为(a,a+(a+b+1))
都可达
问题是如果需要(a,a+b) -> (a+a+b,a+b)
呢
既然如此,又注意到不使用q都是log级别的次数
直接dp空间不够
所以变成
dp[a][step] = maxb
也就是求min step, 使得 dp[m][step] = n
有个问题是满足局部性吗
似乎不会证明
感觉需要改一改
dpa[a][step] = maxb
为最后一次是固定a 得到的maxb
dpb[b][step] = maxa
为最后一次是固定b 得到的maxa
dpa[a][step] = max(a+dpa[a][step-1]+(?1), a+wb+(?1) (dpb[wb][step-1] >= a))
dpb 同理
问题 对于给定 step, dpa内有单调性吗
似乎可以归纳一下,设给定step, dpa和dpb都是非严格单调递增,
那么step+1时,如果dpa[step+1][a] > dpa[step+1][a+1]
a+dpa[step][a]+1 <= (a+1) + dpa[step][a+1]
, 所以上一次不是固定a,
如果是固定b
:
有额外点数 b+dpb[step][b](==a-b-1)+1
(更大则 都是b,更小则当前不可达), 只要(b+1)+dpb[step][b+1](>=a-b-1)
存在
无额外点数 b+dpb[step][b](==a-b)
(更大则 都是b,更小则当前不可达), 只要(b+1)+dpb[step][b+1](>=a-b)
存在
但注意到这种情况是 a > b 那么必定比这种情况是 之前a不存在(否则之前存在一定是通过a而不是通过b),所以只能通过b到达,所以得证
然后需要注意的是,如果其中一个很小,那么就需要 固定一个反复跳另一个, 这个时候就不要暴力了
写了一下发现并没有单调性
4次,(1,1)(1,2)(3,2)(3,5)(3,8)
4次,(1,1)(1,2)(3,2)(3,5)(8,5)
但4次,4的话最大只能得到7
所以还是暴力吧