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