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 binom{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("");
}
}