购物(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();
}
posted @ 2026-01-24 11:39  zhangruotian_Max  阅读(1)  评论(0)    收藏  举报