#include<iostream>
#include<vector>
using namespace std;
long long dp[101][101];
const int M = 1000000007;
//求组合数C(n,m)
void fun(){
for(int i = 0; i < 102; i ++){
dp[0][i]=1;//m为0时,C(n,0)=1
dp[1][i]=i;//m为1时,C(n,1)=n
}
for(int j = 0; j < 102; j ++){
dp[j][0] = -1;//n为0时,无意义,赋值为-1
}
//n为1时,C(1,m)=1;且m<=n
for(int j = 0; j < 102; j ++){
if(j<=1){//n为1时,满足j<=n时结果才为1
dp[j][1]=1;
}else{
dp[j][1]=-1;//m>n时,无意义,赋值为-1
}
}
for(int row = 2; row < 102; row ++){
for(int col = 2; col < 102;col ++){
if(row == col){
dp[row][col] = 1;//m=n时,C(m,n)=1
}else if(row > col){
dp[row][col] = -1;//m>n时,无意义,赋值为-1
}else{
dp[row][col] = (dp[row - 1][col - 1] + dp[row][col - 1])%M;
}
}
}
}
//求组合数C(n,m)简便方法2;类似杨辉三角
//没有意义的情况用0来填充,仍然满足:c[i][j] = c[i - 1][j - 1] + c[i - 1][j]
long long c[101][101];
void init() //计算组合数
{
c[0][0] = 1;
for(int i = 1;i <= 100;i++)
{
c[i][0] = 1;
for(int j = 1;j <= 100;j++)
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
}
}
int main(){
int K;
cin>>K;
int A, X, B, Y;
cin>>A>>X>>B>>Y;
long long sum = 0;
fun();
for(int i = 0;i <= X;i++)
{
if(i * A <= K && (K - i * A) % B == 0 && (K - i * A) / B <= Y) //满足题目的判断条件
{
sum = (sum + (dp[i][X] * dp[(K-i*A)/B][Y]) % M) % M;
}
}
cout<<sum<<endl;
return 0;
}
小Q的歌单
最新推荐文章于 2020-05-06 21:22:58 发布