Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- ll arr[3];
- ll const mod = 1e9+7;
- ll dp[1010][3][8];
- ll cal(ll n,ll I,int bit){
- if(n == 1){
- bit |= (1<<I);
- if(bit == 7)return 1;
- return 0;
- }
- if(dp[n][I][bit] != -1)return dp[n][I][bit]%mod;
- ll sum = 0;
- if(arr[I] >= n){
- if((bit|(1<<I))==7)
- sum += 1;
- }
- for(ll i = 1 ; i <= arr[I] ; i ++){
- if(i >= n)break;
- if(I == 0){
- sum = (sum + cal(n-i,2,bit|1)%mod + cal(n-i,1,bit|1)%mod)%mod;
- }
- else if(I == 1){
- sum = (sum + cal(n-i,2,bit|2)%mod)%mod;
- }
- else if(I == 2){
- sum = (sum + cal(n-i,0,bit|4)%mod)%mod;
- }
- }
- return dp[n][I][bit] = sum%mod;
- }
- int main()
- {
- for(int i = 0 ; i < 1010 ; i ++)for(int j = 0 ; j < 3 ; j ++)for(int k = 0 ; k < 8 ; k ++)dp[i][j][k] = -1;
- ll n;
- scanf("%lld",&n);
- scanf("%lld %lld %lld",&arr[0],&arr[1],&arr[2]);
- printf("%lld",cal(n,0,0)%mod);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement