2019/8/27 校内模拟赛 考试报告

A.挑战(challenge.cpp)

首先令\(x_i=max(a_i-k,0)\),即破坏第\(i\)个防御区域的代价.

\(dp_i\)表示从\(1...i\)需要的最小代价,有状态转移方程:\(dp_i=min(dp_j)+x_i\),其中\(i-L\le j\le i-1\).

初始化边界\(dp_0=0,dp_{1...n+1}=inf\).动态规划求出\(dp_{n+1}\)即可.

时间复杂度\(O(n^2)\),可以用ST表/线段树优化到\(O(nlogn)\).

B.乌龟(turtle.cpp)

如果\(n>cnt(T)\),答案为\(Len\)\(Len-1\),其中\(cnt(T)\)表示\(T\)的个数,\(Len\)表示字符串的长度.

否则,可以动态规划求出要修改哪\(n\)次操作.

但是我不会😢

C.代表(delegate.cpp)

二分图匹配.

从源点向每个人容量为\(1\)的边,从每个社团向汇点连容量为\(1\)的边,从每个人向他所参加的社团连边.整张网络的最大流就是答案.

也可以用匈牙利算法进行二分图匹配.

正确性显然.

D.树(tree.cpp)

我对题意的理解似乎有问题.我的做法是先\(O(n)\)建出树,再用\(O(logn)\)的倍增LCA操作回答每个询问,时间复杂度\(O(nlogn)\).需要注意对题目中系数的取模处理.

但是总感觉有什么不对.

posted @ 2019-08-27 21:50  TaylorSwift13  阅读(154)  评论(0编辑  收藏  举报