组合数(杨辉三角)
组合数和杨辉三角有一一对应关系。
杨辉三角中每个数字等于左上方数字和右上方数字的和(边界可以认为是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;
}
}