1 2 3
2 4 8
此题是一个关于空间分割的问题,问N个平面最多可以把球体分成几个区域
若是平面分割问题,或许我们还可以通过画画图,找找规律,但空间分割,单纯靠画也是真心累,4个平面就已经让我觉得画起来够呛了既然如此,我们何必从平面分割来推到空间分割呢,毕竟曾经一句“点构成线,线构成面,面构成体”现在可是印象深刻
好了,不闲聊,我们回到正题上,首先N条直线能把平面分成几个区域应该大家都知道吧,添加第N条直线时,最佳的画法是与之前的N-1条直线都有交点,且三条及三条以上的直线之间没有共同的交点,这样可以增加N个区域,于是就得到了这样一个式子
P(n)=P(n-1)+n P(0)=1
那么n个式子相加便可以得到 P(n)=1+(1+2+…+n)=n(n+1)/2+1
接下来我们来考虑空间的情况,同样,为了割法最佳,我们在添加第N个平面时,需要与之前的N-1个平面都有交线,另外任意两条交线之间两两相交且无重点,这样我们新添加的这个面就已经被分割成了P(n-1)个区域,而这P(n-1)个区域可以使得整个空间增加P(n-1)块,故我们可以得到这样一个式子
C(n)=C(n-1)+P(n-1)=C(n-1)+n*(n-1)/2+1 C(0)=1
将n个式子相加便可以得到
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 105; const int inf = 2147483647; const int mod = 1000000007; int main() { int n; while(~scanf("%d",&n)) printf("%d\n",(n*n*n+5*n+6)/6); return 0; }菜鸟成长记