组合数(杨辉三角)

在这里插入图片描述
组合数和杨辉三角有一一对应关系。
杨辉三角中每个数字等于左上方数字和右上方数字的和(边界可以认为是0)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
其中第n行,第m个对应的就是C(n,m)
故遇到组合数问题可构建二维数组存储杨辉三角,再取对应位置的数字

在这里插入图片描述
c++解法:

#include<iostream>
using namespace std;



int main(){
   int k,a,x,b,y,i,j;
    long long int count=0;
    long long int c[101][101];
   while(cin>>k){
   		cin>>a>>x>>b>>y;
   		c[0][0]=1;
   		for(i=1;i<=100;i++){
   			c[i][0]=1;
   			for(j=1;j<=100;j++){
   				c[i][j]=(c[i-1][j-1]+c[i-1][j])%1000000007;
			   }
		}
   		
   		
   		for(i=0;i<=k/a&&i<=x;i++){
   			if((k-i*a)%b==0&&(k-i*a)/b<=y)
   				count=(count+(c[x][i]*c[y][(k-i*a)/b])%1000000007)%1000000007;
            
		}
   		cout<<count<<endl;
   		
   }
}


猜你喜欢

转载自blog.csdn.net/haoshan4783/article/details/89057058