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;
}