Submission

Status:

(-SSSSSSSSS)(-SSSS)(P-SSS)(SSSSSSSSSS)

Subtask/Task Score:

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

Score: 0

User: Trees

Problemset: กองไฟ

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-06 15:41:45

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

int x,c1,c2,c3;
int d1[] = {0,-1,0,0};
int d2[] = {0,0,-1,0};
int d3[] = {0,0,0,-1};
int h = 1e9+7;

int main()
{
    cin >> x >> c1 >> c2 >> c3;
    long long dp[x+1][c1+1][c2+1][c3+1][4];
    
    memset(dp,0,sizeof(dp));

    if(c1 != 0)dp[x-1][c1-1][c2][c3][1] = 1;
    if(c2 != 0)dp[x-1][c1][c2-1][c3][2] = 1;
    if(c3 != 0)dp[x-1][c1][c2][c3-1][3] = 1;

    for(int i=x-1;i>0;--i){
        for(int b1=c1;b1>=0;--b1){
            for(int b2=c2;b2>=0;--b2){
                for(int b3=c3;b3>=0;--b3){
                    for(int last=1;last<=3;++last){
                        if(dp[i][b1][b2][b3][last] == 0)continue;
                        for(int next=1;next<=3;++next){
                            if(next == last)continue;
                            int now1 = b1+d1[next];
                            int now2 = b2+d2[next];
                            int now3 = b3+d3[next];
                            if(now1 < 0 || now2 < 0 || now3 < 0)continue;
                            dp[i-1][now1][now2][now3][next] =(dp[i-1][now1][now2][now3][next] + dp[i][b1][b2][b3][last])%h;
                        }
                    }
                }
            }
        }
    }

    long long ans = 0;

    for(int last=1;last<=3;++last)
    ans += dp[0][0][0][0][last];

    cout << ans%h;
    
}