2022.4.9模拟总结

2022.4.9模拟总结

控制棋盘

题目大意:给定一个 n × m n\times m n×m的棋盘,有一些格子有障碍,要在无障碍格子中布置一些马,控制范围为自身和它通过一步可以跳到的格子之一,至少放多少只马才能将所有无障碍格子控制。

solution:根据 i + j i+j i+j的奇偶性进行黑白染色,分为了一个二分图。根据“日”字进行连线,显然,每一边内部无连边,跑一遍最小覆盖即可。

最长距离

题目大意:给定一个 n × m n\times m n×m的矩形,若 A A A能走到 B B B,那么两个点的距离为 ( x A − x B ) 2 + ( y A − y B ) 2 \sqrt{(x_A-x_B)^2+(y_A-y_B)^2} (xAxB)2+(yAyB)2 。若 X X X Y Y Y有公共边,且两者均不含障碍物,即可从 X X X走到 Y Y Y。求移走 T T T块障碍物后,格子间的最大距离。

soluiton:考虑从每个点跑一遍 s p f a spfa spfa,若有障碍物则边权为 1 1 1,找到一个点 ( k 1 , k 2 ) (k_1,k_2) (k1,k2)使得 d i s k 1 , k 2 ≤ T dis_{k_1,k_2}\le T disk1,k2T,计算最大距离即可。

粉刷匠

题目大意:有 n n n条木板, m m m个格子,要被刷成红色或蓝色,每次粉刷,选择一条木板上一段连续的各自,涂上一种颜色,每个格子刷一次,若粉刷 T T T次,求最多能正确粉刷多少格子。

soluiton:考虑 d p dp dp

f i , j , k , 0 / 1 / 2 f_{i,j,k,0/1/2} fi,j,k,0/1/2表示第 i i i跟木条,第 j j j个位置,刷了 k k k次,当前不刷/刷红色/刷蓝色的最大正确粉刷数量。

转移如下:
f i , j , k , 0 = m a x { f i , j − 1 , k , 0 / 1 / 2 } f i , j , k , 1 = m a x { f i , j − 1 , k − 1 , 0 / 2 , f i , j − 1 , k , 1 } f i , j , k , 2 = m a x { f i , j − 1 , k − 1 , 0 / 1 , f i , j − 1 k , 2 } f_{i,j,k,0}=max\{f_{i,j-1,k,0/1/2}\}\\ f_{i,j,k,1}=max\{f_{i,j-1,k-1,0/2},f_{i,j-1,k,1}\}\\ f_{i,j,k,2}=max\{f_{i,j-1,k-1,0/1},f_{i,j-1k,2}\} fi,j,k,0=max{fi,j1,k,0/1/2}fi,j,k,1=max{fi,j1,k1,0/2,fi,j1,k,1}fi,j,k,2=max{fi,j1,k1,0/1,fi,j1k,2}
初始化:
f i , 0 , k , 0 = m a x { f i − 1 , m , k , 0 / 1 / 2 } f_{i,0,k,0}=max\{f_{i-1,m,k,0/1/2}\} fi,0,k,0=max{fi1,m,k,0/1/2}
答案:
m a x { f n , m , t , 0 / 1 / 2 } max\{f_{n,m,t,0/1/2}\} max{fn,m,t,0/1/2}
时间复杂度: O ( n m T ) O(nmT) O(nmT)

数组要记得滚动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值