根据勾股定理:
一个武器 ( x , y ) (x,y) (x,y) 能被炸弹 ( u , v ) (u,v) (u,v) 攻击到 ⇔ ( x − u ) 2 + ( y − v ) 2 < = k 2 \Leftrightarrow (x-u)^2+(y-v)^2<=k^2 ⇔(x−u)2+(y−v)2<=k2
通过这个条件,对每个炸弹求出一个 m m m 位的 bitset 表示范围内武器集合。
我们考虑简化摧毁武器的过程,发现每次都是摧毁一段连续区间内的武器。即:将 m m m 个武器分成若干个连续区间,按顺序每次摧毁其中 1 1 1 个。
那么就想到搜索。搜索区间的划分方案。
- d f s ( i , c n t , l s t ) dfs(i,cnt,lst) dfs(i,cnt,lst) 表示考虑到第 i i i 个位置,当前区间左端点是 l s t lst lst, l s t lst lst 之前划分了 c n t cnt cnt 个区间的最小答案。
- 每次考虑当前是否开一个新区间,转移到 d f s ( i + 1 , c n t , l s t ) dfs(i+1,cnt,lst) dfs(i+1,cnt,lst) 和 d f s ( i + 1 , c n t + 1 , i + 1 ) dfs(i+1,cnt+1,i+1) dfs(i+