#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf = 1000000007;
int dp1[10010];
int dp2[10010];
int dp3[10010];
int main(){
int n,x,y,a,b;
while(scanf("%d%d%d%d%d",&n,&x,&y,&a,&b)!=EOF){
memset(dp1,0,sizeof(dp1));
memset(dp2,0,sizeof(dp2));
memset(dp3,0,sizeof(dp3));
//----------------
int maxn=max(a,b);
dp1[maxn]=1;
for(int i=maxn+1;i<=n;i++){
if(i>=x) {
dp1[i]=(dp1[i]%inf+dp1[i-x]%inf)%inf;
}
if(i>=y&&(y!=x)){
dp1[i]=(dp1[i]%inf+dp1[i-y]%inf)%inf;
}
}
//----------------
int minn=min(a,b);
dp2[0]=1;
for(int i=1;i<=minn;i++){
if(i>=x) {
dp2[i]=(dp2[i]%inf+dp2[i-x]%inf)%inf;
}
if(i>=y&&(y!=x)){
dp2[i]=(dp2[i]%inf+dp2[i-y]%inf)%inf;
}
}
//---------------
dp3[minn]=1;
for(int i=minn+1;i<=maxn;i++){
if(i>=x) {
dp3[i]=(dp3[i]%inf+dp3[i-x]%inf)%inf;
}
if(i>=y&&(y!=x)){
dp3[i]=(dp3[i]%inf+dp3[i-y]%inf)%inf;
}
}
if(maxn==n) dp1[n]=0;
__int64 sum=(((__int64)(((__int64)((__int64)dp1[n]*dp2[minn]))%inf)*dp3[maxn])%inf)%inf;
printf("%I64d\n",sum%inf);
}
return 0;
}
现在水题都做不好了。。。一直wrong 原来是因为少加了个__int64,我以为在前面加就行了,最后在相乘的前面那里加上试试,结果过了!!