Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)
Subtask/Task Score:
{20/20}{30/30}{30/30}{20/20}
Score: 100
User: mydKN
Problemset: กองไฟ
Language: cpp
Time: 0.397 second
Submitted On: 2026-03-09 18:46:05
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = 1e9 + 7;
const ll maxa = 55;
int n;
ll dp[2][3][3][maxa][maxa][maxa];
int arr[3];
ll res;
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin >> n;
cin >> arr[0] >> arr[1] >> arr[2];
dp[1][0][0][1][0][0] = dp[1][1][1][0][1][0] = dp[1][2][2][0][0][1] = 1;
for(int i=2;i<=n;++i){
memset(dp[i%2], 0, sizeof(dp[i%2]));
for(int j=0;j<3;++j){
for(int k=0;k<3;++k){
for(int l=0;l<3;++l){
if(k == l) continue;
if(i == n && j == k) continue;
for(int a=(k==0);a<=arr[0];++a){
for(int b=(k==1);b<=arr[1];++b){
for(int c=(k==2);c<=arr[2];++c){
if(k==0) dp[i%2][j][k][a][b][c] = (dp[i%2][j][k][a][b][c] + dp[!(i%2)][j][l][a-1][b][c]) % mod;
else if(k==1) dp[i%2][j][k][a][b][c] = (dp[i%2][j][k][a][b][c] + dp[!(i%2)][j][l][a][b-1][c]) % mod;
else dp[i%2][j][k][a][b][c] = (dp[i%2][j][k][a][b][c] + dp[!(i%2)][j][l][a][b][c-1]) % mod;
}
}
}
}
}
}
}
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
res = (res + dp[n%2][i][j][arr[0]][arr[1]][arr[2]]) % mod;
}
}
cout << res;
}