萌萌哒ydc来放题解了
先放day1,day2明天才考
T1
考你会不会编程
T2
$n$个点$n-1$条边的无向连通图就是个树
考虑距离为2的点对,可以理解为枚举$i$,$i$能走到的点集两两之间距离为$2$
我们要做的是对于一个数组$a_1,a_2,a_3,\ldots,a_m$,要求$a_ia_j,i \neq j$的Σ与max
max是个很简单的事情,你只要求$a$数组的最大值与次大值即可
至于Σ,我们知道$\sum\limits_{i=1}^n \sum\limits_{j=1}^n a_ia_j=(\sum\limits_{i=1}^na_i)^2$,于是容易推出我们要求的就是$(\sum\limits_{i=1}^na_i)^2-\sum\limits_{i=1}^n a_i^2$
当然你也可以令$s=\sum\limits_{i=1}^n a_i$,求$\sum\limits_{i=1}^n a_i(s-a_i)$
复杂度应该是$O(n)$的
T3
我们很容易看出一个很经典的完全背包的框架:我们可以在某个时刻上升$1,2,3,\ldots \infty$次,有$n$个时刻
当然根据题意,这题和完全背包有很多的不同,比如能下降,不能选择上升$0$次,下界不可到上界不可越,有些位置不允许,等等等等
即使如此,我们仍然能以完全背包的思想为核心,解决这个题
由于是完全背包,显然可以用滚动数组优化将空间降为$O(m)$。为了便于理解,我们用二维状态来描述:$dp_{i,j}$表示横坐标为$i$,纵坐标为$j$的最小步数
由于不能上升$0$次,我们这样转移:$dp_{i,j}=\min(dp_{i-1,j-x_i}+1,dp_{i,j-x_i}+1)$
由于有障碍,我们求出$dp_{i,j}$后再将障碍位置的值赋值为$\infty$
由于上界可以越过,所以要特殊转移一下,$dp_{i,m}=\min(dp_{i-1,k}+s_k)$,$s_k$为$k$达到$m$处的花费,他是个式子,在此不将其展开
最后由于能下降,所以$dp_{i,j}$还可以由上一步在$j+y_i$的状态转移
如此问题就解决了,时间复杂度$O(nm)$