HDU-2512 一卡通大冒险 【模板】 贝尔数
HDU-2512 一卡通大冒险 【模板】 贝尔数
贝尔数
贝尔数是组合数学的一组整数序列
\[B_0 = 1,B_1=1,B_2=2,B_3=5,B_4=15,B_5=52 \dots
\]
\(B_n\) 是基数为\(n\)的集合的划分方法的数目。\(B_3 = 5\) ,是由于\(a,b,c\) 三个元素的集合有5种不同的划分方法
\[\{\{a\},\{b\},\{c\}\}
\\
\{\{a\},\{b,c\}\}
\\
\{\{b\},\{a,c\}\}
\\
\{\{c\},\{a,b\}\}
\\
\{\{a,b,c\}\}
\]
递推公式
\[B_{n+1} = \sum \tbinom{n}{k}\cdot B_k
\]
也可以采用贝尔三角形递推
HDU-2512
题意
输出第i个贝尔数
题解
此题采用递推三角形
int bell[2015][2015];
void f() {
bell[1][1] = 1;
for (int i = 2; i <= 2005; i++) {
bell[i][1] = bell[i - 1][i - 1];
bell[i][1] %= 1000;
for (int j = 2; j <= i; j++)
bell[i][j] = bell[i - 1][j - 1] + bell[i][j - 1], bell[i][j] %= 1000;
}
}
int main() {
f();
int T = readint();
while (T--) {
int n = readint();
Put(bell[n][n]);
puts("");
}
}