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} (xA−xB)2+(yA−yB)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,k2≤T,计算最大距离即可。
粉刷匠
题目大意:有 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,j−1,k,0/1/2}fi,j,k,1=max{fi,j−1,k−1,0/2,fi,j−1,k,1}fi,j,k,2=max{fi,j−1,k−1,0/1,fi,j−1k,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{fi−1,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)。
数组要记得滚动。