1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <bits/stdc++.h> #define MAXN 1000005 #define MOD 1000000007 using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9') { if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9') { x=(x*10)+(ch-'0'); ch=getchar(); } return x*f; } int ans,n; int num[MAXN]; void dfs(int i,int a,int b,int c,int d){ if (a<0||b<0||c<0||d<0) return ; if (i==n+1&&a==0&&b==0&&c==0&&d==0) { ans=(ans+1)%MOD; return ; } if (num[i-1]==0){ num[i]=0; dfs(i+1,a-1,b,c,d); num[i]=1; dfs(i+1,a,b,c-1,d); } else { num[i]=0; dfs(i+1,a,b,c,d-1); num[i]=1; dfs(i+1,a,b-1,c,d); } } int main(){ n=read(); int a=read(),b=read(),c=read(),d=read(); num[1]=0; dfs(2,a,b,c,d); num[1]=1; dfs(2,a,b,c,d); printf("%d\n",ans); }
|