Eulerian Number
注意
下文中的欧拉数特指 Eulerian Number。注意与 Euler numbers,Euler's number 作区分。
在计算组合中,欧拉数(Eulerian Number)是从
例如,从数字
排列 | 满足要求的排列 | 个数 |
---|---|---|
1 2 3 | 1, 2 & 2, 3 | 2 |
1 3 2 | 1, 3 | 1 |
2 1 3 | 1, 3 | 1 |
2 3 1 | 2, 3 | 1 |
3 1 2 | 1, 2 | 1 |
3 2 1 | 0 |
所以按照
对于
满足要求的排列 | 个数 | |
---|---|---|
1 | ||
1 | ||
1 | ||
1 | ||
4 | ||
1 |
公式¶
可以通过递推或者递归的方法计算欧拉数。
首先,当
其次,当
最后,考虑在
考虑
考虑从
考虑从
综上所述,有
实现¶
int eulerianNumber(int n, int m) {
if (m >= n || n == 0) return 0;
if (m == 0) return 1;
return (((n - m) * eulerianNumber(n - 1, m - 1)) +
((m + 1) * eulerianNumber(n - 1, m)));
}
习题¶
- CF1349F1 Slime and Sequences (Easy Version)
- CF1349F2 Slime and Sequences (Hard Version)
- UOJ 593. 新年的军队
- P7511 三到六
buildLast update and/or translate time of this article,Check the history
editFound smelly bugs? Translation outdated? Wanna contribute with us? Edit this Page on Github
peopleContributor of this article OI-wiki
translateTranslator of this article Visit the original article!
copyrightThe article is available under CC BY-SA 4.0 & SATA ; additional terms may apply.