Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: tHeNyXs

Problemset: กองไฟ

Language: cpp

Time: 0.041 second

Submitted On: 2026-03-09 20:11:38

#include <bits/stdc++.h>
using namespace std;

#define ll long long
const int mod = 1e9+7;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    int A,B,C;
    cin >> A >> B >> C;

    ll ans = 0;

    for(int first=0; first<3; first++){

        if(first==0 && A==0) continue;
        if(first==1 && B==0) continue;
        if(first==2 && C==0) continue;

        static ll dp[151][151][151][3];
        memset(dp,0,sizeof(dp));

        int a=A,b=B,c=C;

        if(first==0) a--;
        if(first==1) b--;
        if(first==2) c--;

        dp[a][b][c][first] = 1;

        for(int i=a;i>=0;i--){
            for(int j=b;j>=0;j--){
                for(int k=c;k>=0;k--){

                    if(i>0){
                        dp[i-1][j][k][0] = (dp[i-1][j][k][0] +
                            dp[i][j][k][1] + dp[i][j][k][2]) % mod;
                    }

                    if(j>0){
                        dp[i][j-1][k][1] = (dp[i][j-1][k][1] +
                            dp[i][j][k][0] + dp[i][j][k][2]) % mod;
                    }

                    if(k>0){
                        dp[i][j][k-1][2] = (dp[i][j][k-1][2] +
                            dp[i][j][k][0] + dp[i][j][k][1]) % mod;
                    }

                }
            }
        }

        for(int last=0; last<3; last++){
            if(last!=first){
                ans = (ans + dp[0][0][0][last]) % mod;
            }
        }
    }

    cout << ans << "\n";
}