Loading

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("");
    }
}
posted @ 2020-08-20 17:06  MQFLLY  阅读(129)  评论(0编辑  收藏  举报