Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPP-SSSSS)

Subtask/Task Score:

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

Score: 80

User: Trees

Problemset: กองไฟ

Language: cpp

Time: 0.015 second

Submitted On: 2026-03-06 19:48:37

#include<bits/stdc++.h>
using namespace std;
int x,c1,c2,c3;
int h = 1e9+7;
int dp[105][105][105][4];

int d1[] = {-1,0,0};
int d2[] = {0,-1,0};
int d3[] = {0,0,-1};

int hello(int a,int b,int c,int last,int first)
{
    if(a<0 || b<0 || c<0)return 0;
    if(a==0 && b==0 && c==0){
        if(last == first)return 0;
        return 1;
    }
    if(dp[a][b][c][last] != -1)return dp[a][b][c][last];

    long long ans = 0;
    int n = first;

    if(a>0 && last != 1)
    ans = (ans + hello(a-1,b,c,1,n))%h;
    if(b>0 && last != 2)
    ans = (ans + hello(a,b-1,c,2,n))%h;
    if(c>0 && last != 3)
    ans = (ans + hello(a,b,c-1,3,n))%h;

    return dp[a][b][c][last] = ans;
}

int main()
{
    cin >> x >> c1 >> c2 >> c3;

    int ans = 0;
    
    for(int i=0;i<3;++i){
        memset(dp,-1,sizeof(dp));
        ans += hello(c1+d1[i],c2+d2[i],c3+d3[i],i+1,i+1);
    }

    cout << ans;

}