模拟88 题解
A. 军训队列
仔细看题,会发现问题是随便交换位置。
为了使答案更小,显然可以进行排序后$dp$。
有$dp_{i,k}=dp_{j-1,k-1}+(a[i]-a[j])^2$。
拆开平方式会发现是最简单的斜率$dp$式,而且$a$数组是单调的。
所以用单调队列维护一下凸包就完了。
因为在维护凸包的过程中需要计算交点,所以避免除$0$,要$unique$一下。
B. 山屋惊魂
模拟题。
设$f_{i,j}$表示$i$个色子,投出$j$的概率。
$dp_{i,j,k,u,v}$表示$i$步之后,属性阶分别为$j,k,u,v$的概率。
按照题中说的做,暴力转移就完了。
不需要关注失败的情况,只要最后用$1$减去成功的概率就完了。
C. 彩球问题
观察数据范围,发现似乎是状压题。
暴力状压复杂度不是很对,所以可以分组状压。
个数相同的球是等价的,可以分在同一组里,同一组内的状态可以排序,大大减少状态数。
所以最终的状态数只有一万多,暴力转移就完了。
然而正解更加优秀一些。
实际上问题可以不断地划分为子问题,而且只需要关注最后一位的小球个数,并不关注每个小球属于哪一组。
所以设$f_{i,j,k,d}$,表示1个球的剩下$i$个,2个球的剩下$j$个,3个球的剩下$k$个,最后一个的个数为$d$。
$O(1)$转移,复杂度是$O(n^3)$的。