刚刚听说小米与微软合作,将要出小米4上的WIN10ROM,我想说,会有多少人主动去刷机呢?Orz
题意
给定一些山,每座山都有一个高度height与限制limit,表示这座山的高度为height,这座山之前高度大于它的山的数量不能超过limit,求合法的标号序列数量和高度序列数量
分析
对于第一问来说,高度较小的山放在哪里不会影响到高度较大的山(因为高度较大的山的只有对高度比他还要大的山的数目的限制).那么我们就按高度的从大到小来枚举山,每座山在摆放时,由于比它大的山已经被放好了,所以它此时的可选位置可以求出来.那么第一问就是所有这些位置的乘积
第二问与第一问不同的是,可能会有两个合法的标号序列的高度序列相同.我们按高度排序后枚举的话,我们需要处理的就是高度相等的山.显然,完全相等的山,交换它们对高度序列无影响.我们可以将limit作为第二关键字来排序.我们不妨让关键值较小的山排在关键值较大的前面.这样每一座山的限制范围都有一个限制范围,用这个限制范围来做类似格子中每一行格子从1开始到limit的图形上从左下到右上角的方案数.
代码
1 | #include <cstdio> |