#include<cstdio> int n,m; long long f[16][101]; int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=m;i++)f[1][i]=i*2; for(int i=1;i<=n;i++)f[i][1]=2; for(int i=2;i<=n;i++) for(int j=2;j<=m;j++){ f[i][j]=f[i][j-1]+f[i-1][j-1]; } printf("%lld",f[n][m]); return 0; }
对于一个n维的球体,去和m-1个其他的球相交,相交处必然是n-1维的球面。
令f[i][j]表示 j个i维的物体最多能把空间分成几份,每增加一个球,增加的空间就是j-1个i-1维的球将空间分的份数。
j-1个球本来将空间分成了f[i][j-1] 因此f[i][j]=f[i][j-1]+f[i-1][j-1]。