题意:有一个长度为$N$的木棍,有两种操作:
- 把一个长度为$n$的木棍分成长为$x$和长为$n-x$的木棍的话,操作代价是$x(n-x)$
- 把一个长度为$n$的木棍分成长为$x$,长度$y$和长为$n-x-y$的木棍的话,操作代价是$xy+x(n-x-y)+y(n-x-y)$
要求把木棍分成若干段,每段长度都在区间$[A, B]$内,求最小代价
题解:首先第二个操作其实就是执行了两次第一个操作,可以无视。然后把长度为$N$的木棍看成$N$个点的完全图,那么一次操作就是把这个图分成了两个点数为$X$和$Y$的完全图。
假设你最后分成的段为$a_1,a_2,\dots,a_k$,那么代价就是$\binom{N}{2} - \sum_{i=1}^{k} \binom{a_i}{2}$。所以,我们的目的就是为了使上式右边的和最大。
只要每个$a_i$尽量大即可。于是我们优先把每段都看成$B$那么长,那么考虑最后一段长度为$x$:
-
$A \le x \le B$ :不需要再砍了,直接作为最后一段即可。 -
$x < A$ :我们需要从其他段里拿一些过来,使得$x$变成$A$。每次就贪心的拿一个长为$B$的,尽量加上去即可。
题意:有三个班级,分别有$amt_0, amt_1, amt_2$个人,第$i$个班级每个人分数范围为$lo_i$到$hi_i$。假设每个班级的人都无法区分,每个人的分数都互不相同,问把这些人按照分数排序后有多少种可能的序列。对$10^9+7$取模
题解:令$dp(i,j,k,x)$表示三个班级分别有$i$,$j$和$k$个人确定了分数,分数按照从小到大分配后,最后一个人的分数恰好是$x$的方案数。然后就是枚举下一个人来自哪个班级,以及给它分配什么分数即可。
题意:有一个$n$个点$m$条边的有向无环图,第$i$条边从$f_i$到$t_i$。保证仅有节点$0$的入度为$0$,仅有节点$n-1$的出度为$0$。现在你要给每个点分配一个标号$x_i$使得:
-
$x_0=0$ ,$x_{n-1}=1$ -
令$S(v)$是能够$v$能够到达的点,$T(v)$是能够到达$v$的点,那么$x(v)=\frac{(min_{y \in S(v)} x_y) + max_{z \in T(v)} x_z)}{2}$
输出$x(v)$的最简分数形式,保证存在一组解使得分子和分母都在有符号$64$位整数里。
题解:每次选择一条从$s$到$t$的路径,使得:
-
除了$s$和$t$,其它点都没有被标号;
-
点$s$和$t$的标号之差除以路径长度最小。
然后给这条路径加上一个等差数列即可(如何证明?)。