这次比赛得了168.2分,No.7,还不错
T1 Fine Dining
赛时
T 1 T1 T1 一眼看过去就知道是最短路,但是想了半天都没有想到有什么方法,最多只能想到暴力,等做完 T 2 、 T 3 T2 、T3 T2、T3 再回来做。但仍然没有办法。无奈之下只能打了这个 O ( n m k ) O(nmk) O(nmk) 的方法:先从 n n n 跑最短路,然后暴力枚举每一个点和每一个稻草堆,然后跑最短路再比较一下。得分: 50 50 50;
赛后
果然,正解是最短路。
首先跑一遍最短路是毋庸置疑的。
接着, 新建一个源点
n
+
1
n+1
n+1 ,然后从从这个源点建一条边连向每个草堆,权值为
d
i
s
1
i
−
a
i
dis1_i-a_i
dis1i−ai,dis1为第一次最短路求出来的答案。接着,再跑一次最短路,得出
d
i
s
2
i
dis2_i
dis2i 。
然后,将
d
i
s
1
i
dis1_i
dis1i 和
d
i
s
2
i
dis2_i
dis2i 比较。若
d
i
s
1
i
<
d
i
s
2
i
dis1_i<dis2_i
dis1i<dis2i 则输出
0
0
0 ,否则输出
1
1
1 。自己理解一下(ノ ̄▽ ̄)。
T2 Cowpatibility
赛时
T 2 T2 T2 一直没有什么好想法,只能打暴力结果坑了个 18.2 18.2 18.2 分。
赛后
正确做法呢,是容斥原理。由于不是很懂,这里不详细展开。
T3 teamwork
赛时
比赛的时候一看就觉得是dp题,于是
设
f
i
f_i
fi 为在第i个点的最大值,状态转移方程就是:
f
i
=
m
a
x
(
f
[
j
−
1
]
+
m
a
x
(
a
[
h
]
)
∗
(
i
−
j
+
1
)
)
(
1
<
=
i
<
=
n
,
i
−
j
+
1
<
=
k
,
i
<
=
h
<
=
j
)
f_i=max(f[j-1]+max(a[h])*(i-j+1)) (1<=i<=n,i-j+1<=k,i<=h<=j)
fi=max(f[j−1]+max(a[h])∗(i−j+1))(1<=i<=n,i−j+1<=k,i<=h<=j)
最后输出
f
n
f_n
fn 就可以了
总结
这次还不错!继续努力!