Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPP-SSSSS)
Subtask/Task Score:
{20/20}{30/30}{30/30}{0/20}
Score: 80
User: meme_boi2
Problemset: กองไฟ
Language: cpp
Time: 0.029 second
Submitted On: 2026-03-20 09:20:39
#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7;
int dp[3][3][151][151][151];
int32_t main(){
cin.tie(nullptr)->sync_with_stdio(0);
int n;
cin >> n;
int a, b, c;
cin >>a >> b >> c;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
array<int,3> arr = {0,0,0};
if(i == j){
arr[i] = 2;
dp[i][j][arr[0]][arr[1]][arr[2]] = 0;
}else{
arr[i] = 1;
arr[j] = 1;
dp[i][j][arr[0]][arr[1]][arr[2]] = 1;
}
}
}
for(int i = 3; i <=n; i++){
for(int j = 0; j < i; j++){
for(int k =0; k < i; k++){
int t = i - j - k;
if(t < 0) continue;
if(j - 1 >= 0) dp[0][0][j][k][t] = (dp[0][1][j-1][k][t] + dp[0][2][j-1][k][t])%mod;
if(k - 1 >= 0) dp[0][1][j][k][t] = (dp[0][0][j][k-1][t] + dp[0][2][j][k-1][t])%mod;
if(t - 1 >= 0) dp[0][2][j][k][t] = (dp[0][0][j][k][t-1] + dp[0][1][j][k][t-1])%mod;
if(j - 1 >= 0) dp[1][0][j][k][t] = (dp[1][1][j-1][k][t] + dp[1][2][j-1][k][t])%mod;
if(k - 1 >= 0) dp[1][1][j][k][t] = (dp[1][0][j][k-1][t] + dp[1][2][j][k-1][t])%mod;
if(t - 1 >= 0) dp[1][2][j][k][t] = (dp[1][0][j][k][t-1] + dp[1][1][j][k][t-1])%mod;
if(j - 1 >= 0) dp[2][0][j][k][t] = (dp[2][1][j-1][k][t] + dp[2][2][j-1][k][t])%mod;
if(k - 1 >= 0) dp[2][1][j][k][t] = (dp[2][0][j][k-1][t] + dp[2][2][j][k-1][t])%mod;
if(t - 1 >= 0) dp[2][2][j][k][t] = (dp[2][0][j][k][t-1] + dp[2][1][j][k][t-1])%mod;
}
}
}
cout << (dp[0][1][a][b][c] + dp[0][2][a][b][c] + dp[1][0][a][b][c] + dp[1][2][a][b][c] + dp[2][0][a][b][c] + dp[2][1][a][b][c])%mod;
}
/*
c2_su64_bonfire
cd "c:\Users\RICOH-NB110\Desktop\Computer Programing\gchan\" ; if ($?) { g++ c2_su64_bonfire.cpp -o c2_su64_bonfire } ; if ($?) { .\c2_su64_bonfire}
*/