有关组合数有几个基础的公式不是很好记,可以这样
1.杨辉三角的三条折线。
- c(n,m)= c(n-1,m-1)+c(n-1,m);
5+10=15 第一个折线。
void to()
{
c[0][0]=1;
for(int i=1;i<=10;i++)
{
c[i][0]=1;
for(int j=1;j<=i;j++)
{
c[i][j]=c[i-1][j]+c[i-1][j-1];
// c[0][1]=0;
}
}
}
signed main()
{
to();
cout<<c[4][3]<<endl;
}
2.1+4+10=15.
第二个折线。
c(3,0)+ c(4,1)+c(5,2)=c(6,2);
证明:
15=10+5,
10 , 4, 1,
15-5+5-1+1=15;
换成组合数表示,就是
c(6,2)-c(5,1)+c(5,1)-c(4,0)+c(4,0)-c(3,-1) (规定c(3,-1)为0)
转换成c(n,m) 表示的那种算式就是让人很烦的很难记的那个东西。
在杨辉三角矩阵上就很容易了。
3.
第三个折线
1+4+10=15,
c(3,3)+c(4,3)+c(5,3)=c(6,4);
证明:15-5+5-1+1-0=15;
c(6,4)-(5,4)+(5,4)-(4,4)+(4,4)-(3,4);
这就是苦逼的他了
然后是一个计数原理
一句话概括,
两位二进制数的所有写法为2^2,从0写到3。