hdu 1466 计算直线的交点数

#include<stdio.h>
int main
()
{

int
i,j,n,f[21][191];
//f[i][j]表示i条边时,是否能产生j个结点,能,返回1,不能,返回0
for(i=0;i<21;i++)
  for
(j=0;j<191;j++)
   f[i][j]=(j==0);
  //f[i][0]都置1
  for(n=2;n<21;n++)
   for
(i=n-1;i>=1;i--)
    for
(j=0;j<191;j++)
     if
(f[n-i][j]==1)
      f[n][j+(n-i)*i]=1;
     //如果f[n][x]==1
     //f[n][x+((n-i)*i)]=1
     while(scanf("%d",&n)!=EOF)
     {

      printf("0");
      for
(j=1;j<=n*(n-1)/2;j++)
       if
(f[n][j])
        printf(" %d",j);
       printf("/n");
     }

  return
0;
}

 

一.   N条直线把空间分成几部分

 

现在说地是空间了, 不是平面了,要注意!

 

我们来讨论一下吧

 

  

点分线(0维分1):C(N,1)+C(N,0)
线分面(1维分2):C(N,2)+C(N,1)+C(N,0)
面分空间(2维分3):C(N,3)+C(N,2)+C(N,1)+C(N,0)
如果n维划分有意义,同理可以推广!

 

我解释一下上面地公式吧

 

N个点最多把直线分成C(n,0)+C(n,1)

N条直线最多把平面分成C(n,0)+C(n,1)+C(n,2)

N个平面最多把空间分成

C(n,0)+C(n,1)+C(n,2)+C(n,3)=(n^3+5n+6)/6份;

N个空间最多把“时空”分成

C(n,0)+C(n,1)+C(n,2)+C(n,3)+C(n,4)份;

……

依此类推下去就行!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值