时间安排
8
:
30
−
9
:
00
8:30-9:00
8:30−9:00 把四道题都看了一遍,T1是真的不会,T2是个dp,T3一看就是最短路径生成树再上线段树,T4也没看出什么。
9
:
00
−
9
:
20
9:00-9:20
9:00−9:20 推了推T1,但是怎么都想象不到四维五维的情况,就写了个模拟就去看T2了。
9
:
20
−
10
:
00
9:20-10:00
9:20−10:00 考虑题中所给的这样一个条件:所有的作业的完成的时间是相同的,所以我们不用考虑作业的种类,只需要考虑完成了几个作业即可,所以我设的dp状态为
f
i
,
j
f_{i,j}
fi,j,表示考虑完前
i
i
i 个,完成了
j
j
j 个的最小的代价,显然需要先判断第
j
j
j 个作业是否有时间完成,如果可以,转移方程即为
f
i
,
j
=
m
i
n
(
f
i
,
j
,
f
i
−
1
,
j
−
1
)
f_{i,j}=min(f_{i,j},f_{i-1,j-1})
fi,j=min(fi,j,fi−1,j−1) 和
f
i
,
j
=
m
i
n
(
f
i
,
j
,
f
i
−
1
,
j
+
v
a
l
)
f_{i,j}=min(f_{i,j},f_{i-1,j}+val)
fi,j=min(fi,j,fi−1,j+val),
n
2
n^2
n2 转移即可。
10
:
00
−
11
:
00
10:00-11:00
10:00−11:00 对于T3,很明显就是个最小路径生成树,然后再维护一个线段树,但是我忘了最小路径生成树怎么码了,所以就打算暴力记录每个点到
1
1
1 和
n
n
n 的路径,就是在dijkstra转移的时候把路径上的点用vector存起来然后一起转移即可,然后就依次处理询问即可。值得一提的是我又没看见边是有向边,然后小样例都过了但是大样例过不去,我一直以为是我的最短路的字典序最小没处理好,最后实在调不出来就又去读了一遍题才发现是有向边…
11
:
00
−
12
:
20
11:00-12:20
11:00−12:20 T4我推了一个多小时,首先当
n
n
n 为奇数的情况显然你只要直接压到
1
1
1 然后一个一个取是必胜的,然后就考虑
n
n
n 为偶数的情况,我先推了一下
n
=
6
n=6
n=6 的情况,发现当
n
n
n 为偶数时显然取的时候一定都要取偶数,以为一旦有一个人选了奇数,另一个人就可以直接压到
1
1
1 然后一个一个取,所以选奇数的那个人必输,因此我们只需要考虑都取偶数的情况,发现我们这时就可以把
2
2
2 看成是
1
1
1,那么
n
n
n 就可以缩小一半,当
n
n
n 一直被缩小到为奇数时显然答案已经求出了,为
1
1
1,所以我们假设
n
n
n 中
2
2
2 的因子的个数为
m
m
m,则答案为
2
m
2^m
2m,然后直接求就行了,整体时间复杂度为
O
(
n
l
o
g
k
)
O(nlog\,k)
O(nlogk)。
12
:
20
−
12
:
40
12:20-12:40
12:20−12:40 又去想了想怎么优化T2的dp。
12
:
40
−
13
:
00
12:40-13:00
12:40−13:00 提交。