Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPP-SSSS)
Subtask/Task Score:
{20/20}{30/30}{30/30}{0/20}
Score: 80
User: 12345678
Problemset: กองไฟ
Language: cpp
Time: 0.012 second
Submitted On: 2025-11-27 21:34:08
#include <bits/stdc++.h>
using namespace std;
const int nx=155, kx=51, mod=1e9+7;
int n, a, b, c, dp[nx][kx][kx][3][3], ans;
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>a>>b>>c;
if (a) dp[1][1][0][0][0]=1;
if (b) dp[1][0][1][1][1]=1;
if (c) dp[1][0][0][2][2]=1;
for (int i=2; i<=n; i++)
{
for (int j=0; j<=a; j++)
{
for (int k=0; k+j<=i; k++)
{
int ca=j, cb=k, cc=i-j-k;
for (int cur=0; cur<3; cur++)
{
for (int f=0; f<3; f++)
{
if (cur==0)
{
if (!ca) continue;
for (int pv=0; pv<3; pv++) if (pv!=cur) dp[i][ca][cb][cur][f]=(dp[i][ca][cb][cur][f]+dp[i-1][ca-1][cb][pv][f])%mod;
}
if (cur==1)
{
if (!cb) continue;
for (int pv=0; pv<3; pv++) if (pv!=cur) dp[i][ca][cb][cur][f]=(dp[i][ca][cb][cur][f]+dp[i-1][ca][cb-1][pv][f])%mod;
}
if (cur==2)
{
if (!cc) continue;
for (int pv=0; pv<3; pv++) if (pv!=cur) dp[i][ca][cb][cur][f]=(dp[i][ca][cb][cur][f]+dp[i-1][ca][cb][pv][f])%mod;
}
}
}
}
}
}
for (int i=0; i<3; i++) for (int j=0; j<3; j++) if (i!=j) ans=(ans+dp[n][a][b][i][j])%mod;
cout<<ans;
}