考虑特殊元素,高度为 n n n的建筑,将其当做分水岭;再对于一种特定的方案划分成若干个集合,以每个被看到的建筑作为集合划分的标准(并且将这个建筑作为集合的代表元素)
比如说,现在建筑群的高度从左到右依次是 32541 3 2 5 4 1 32541,那么就会划分出两个集合 { 3 2 } , { 4 1 } \left\{ 3\space 2 \right\},\left\{ 4\space 1\right\} {3 2},{4 1},其中代表元素分别是 3 , 1 3,1 3,1
于是可以知道,分水岭左边会被划分出 A − 1 A-1 A−1个部分,右边会被划分出 B − 1 B-1 B−1个部分,而每个部分内部,选出最高的建筑当做代表元素,剩下的建筑随便排列,假设这个部分有 k k k个元素,那么对于这个部分的方案数就是 ( k − 1 ) ! (k-1)! (k−1)!,两者组合在一起会发现刚好是第一类斯特林数的递推公式;然后我们将划分好的 A + B − 2 A+B-2 A+B−2个组,选出 A − 1 A-1 A−1个组放左边,剩下放右边,这是组合数问题;对于左边或者右边,显然只有从小到大排序,于是方案数为 1 1 1;三个部分乘起来就好了