Processing math: 100%

「HNOI 2006」花仙子的魔法

题目大意:求 mn 维球体最多能把 n 维空间划分成多少部分。n15,m100

打表找规律QAQ

f[i][j] 表示 i 维空间 j 个球体,有

f[i][j]=f[i][j1]+f[i1][j1]

其中 f[i][j1] 表示前 j1 个球体划分到的空间数量,f[i1][j1] 表示前 j1 个球体的切面把第 j 个球体的切面划分成了多少部分。

#include <cstdio>
 
typedef long long LL;
LL f[20][105]; int n, m;
 
int main() {
    scanf("%d%d", &m, &n);
    f[1][0] = 1;
    for (int i = 1; i <= m; ++i) f[1][i] = i << 1;
    for (int i = 2; i <= n; ++i) {
        f[i][0] = 1;
        for (int j = 1; j <= m; ++j)
            f[i][j] = f[i-1][j-1] + f[i][j-1];
    }
    printf("%lld\n", f[n][m]);
    return 0;
}