20210928下午
下午开两个文件夹写程序然后改了本地程序没改上传,痛失 A K AK AK, A K AK AK我的 A K AK AK QAQ。
T1 | T2 | T3 | T4 | |
---|---|---|---|---|
预测 | 100 | 100 | 100 | 100 |
一测 | 100 | 100 | 100 | 70 |
T1:
发现只要确定第一个点是否为雷就能确定整个图,所以分别模拟一遍验证就行。
T2:
状压
d
p
dp
dp,可以先找出有效状态以减小时空复杂度,然后枚举相邻状态以转移就行,本质和炮兵阵地没啥区别。
T3:
之前做过,最小生成树板子。
T4:
m
≤
2
m\le 2
m≤2十分友好,由于
m
=
1
m=1
m=1的情况可以通过把第二行赋成极小值解决,就不多赘述了,再次介绍
m
=
2
m=2
m=2的解法。定义
f
i
,
j
,
k
f_{i,j,k}
fi,j,k表示第一维到
i
i
i,第二维到
j
j
j,选出
k
k
k个矩阵的最大值。因为不强制选择
i
,
j
i,j
i,j,所以有
f
i
,
j
,
k
=
max
(
f
i
−
1
,
j
,
k
,
f
i
,
j
−
1
,
k
)
f_{i,j,k}=\max(f_{i-1,j,k},f_{i,j-1,k})
fi,j,k=max(fi−1,j,k,fi,j−1,k),然后分别枚举上下两行选择单行矩阵,即
f
i
,
j
,
k
=
max
t
=
0
t
<
i
(
f
t
,
j
,
k
−
1
+
s
u
m
1
i
−
s
u
m
1
t
)
f_{i,j,k}=\max_{t=0}^{t<i}(f_{t,j,k-1}+sum1_i-sum1_t)
fi,j,k=t=0maxt<i(ft,j,k−1+sum1i−sum1t)和
f
i
,
j
,
k
=
max
t
=
0
t
<
j
(
f
i
,
t
,
k
−
1
+
s
u
m
2
j
−
s
u
m
2
t
)
f_{i,j,k}=\max_{t=0}^{t<j}(f_{i,t,k-1}+sum2_j-sum2_t)
fi,j,k=t=0maxt<j(fi,t,k−1+sum2j−sum2t)
然后若
i
=
=
j
i==j
i==j,则可以选择两行的矩阵,即
f
i
,
i
,
k
=
max
t
=
0
t
<
i
(
f
t
,
t
,
k
−
1
+
s
u
m
1
i
+
s
u
m
2
i
−
s
u
m
1
t
−
s
u
m
2
t
)
f_{i,i,k}=\max_{t=0}^{t<i}(f_{t,t,k-1}+sum1_i+sum2_i-sum1_t-sum2_t)
fi,i,k=t=0maxt<i(ft,t,k−1+sum1i+sum2i−sum1t−sum2t)
总复杂度
O
(
n
3
k
)
O(n^3k)
O(n3k)。
总结:十几年前的省选还是比较简单的。