Submission

Status:

(xSSSSSSSSS)(xSSSS)(xSSSS)(SSSSSSSSSS)

Subtask/Task Score:

{0/20}{0/30}{0/30}{0/20}

Score: 0

User: devilpoohs

Problemset: กองไฟ

Language: cpp

Time: 0.001 second

Submitted On: 2026-03-06 16:23:24

#include<bits/stdc++.h>
using namespace std;
vector<string> v;
const int mod=1e9+7;
int n;
int fnt=0;
int dp[160][55][55][55][3];
int think(int i,int a,int b,int c,int tpe){
    if(i==0){
        return 1;
    }
    // if(dp[i][a][b][c][tpe]!=-1) return dp[i][a][b][c][tpe]; 
    int cnt=0;
    if(i==1){
        if(tpe==0 and a>0){
            if(fnt!=0){
                cnt+=think(i-1,a-1,b,c,0);
                cnt%=mod;
            }
        }
        if(tpe==1 and b>0){
            if(fnt!=1){
                cnt+=think(i-1,a,b-1,c,1);
                cnt%=mod;
            }
        }
        if(tpe==2 and c>0){
            if(fnt!=2){
                cnt+=think(i-1,a,b,c-1,2);
                cnt%=mod;
            }
        }
    }else{
        if(tpe==0 and a>0){
            cnt+=think(i-1,a-1,b,c,1);
            cnt%=mod;
            cnt+=think(i-1,a-1,b,c,2);
            cnt%=mod;
        }else if(tpe==1 and b>0){
            cnt+=think(i-1,a,b-1,c,0);
            cnt%=mod;
            cnt+=think(i-1,a,b-1,c,2);
            cnt%=mod;
        }else if(tpe==2 and c>0){
            cnt+=think(i-1,a,b,c-1,1);
            cnt%=mod;
            cnt+=think(i-1,a,b,c-1,0);
            cnt%=mod;
        }   
    }
    return cnt;
    // return dp[i][a][b][c][tpe]=cnt;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    memset(dp,-1,sizeof(dp));
    int a,b,c;
    cin>>n>>a>>b>>c;
    int ans=think(n,a,b,c,0)%mod;
    memset(dp,-1,sizeof(dp));
    fnt=1;
    ans+=think(n,a,b,c,1)%mod;
    memset(dp,-1,sizeof(dp));
    fnt=2;
    ans+=think(n,a,b,c,2)%mod;
    cout<<ans;
    return 0;
}
/*
7
3 3 1
*/