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