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 |
公式¶
可以通过递推或者递归的方法计算欧拉数。
首先,当
其次,当
最后,考虑在
考虑
考虑从
考虑从
综上所述,有
实现¶
1 2 3 4 5 6 7 | // C++ Version
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)));
}
|
1 2 3 4 5 6 7 8 | # Python Version
def eulerianNumber(n, m):
if m >= n or 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 三到六
build本页面最近更新:,更新历史
edit发现错误?想一起完善? 在 GitHub 上编辑此页!
people本页面贡献者:OI-wiki
copyright本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用