购物(shop)
整体思路:排列组合
我写了一个杨辉三角,然后获得了85分的好成绩
其实这个题目是要特判一堆里面是没有人的(k1或kn)。这个时候答案也很简单。
但是有点不对劲,说不出来
代码如下
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1000000007;
int n,m,k,a,b,c[4010][4010];
//c[i][j]=i里面选j个
void init(){//杨辉三角
c[1][1]=1;
for(int i=1;i<=4000;i++){
for(int j=1;j<=i;j++){
if(i==1&&j==1) continue;
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
}
}
void solve(){
cin>>n>>m>>k>>a>>b;
init();
int ans=0;
//特判
if(k==0){
if(m%b!=0) cout<<0<<endl;
else cout<<c[m/b][n]<<endl;
return ;
}else if(k==n){
if(m%a!=0) cout<<0<<endl;
else cout<<c[m/a][n]<<endl;
return ;
}
for(int i=k*a;i<=m-(n-k)*b;i+=a){
if((m-i)%b!=0) continue;
int cnt=1;
cnt*=c[i/a][k];cnt%=mod;
cnt*=c[(m-i)/b][n-k];cnt%=mod;
ans+=cnt;ans%=mod;
}
cout<<ans<<endl;
}
signed main(){
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
cin.tie(0)->sync_with_stdio(0);
solve();
}

浙公网安备 33010602011771号