1197: [HNOI2006]花仙子的魔法

#include
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]。


你可能感兴趣的:(动态规划/贪心/递推)