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:16:06

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