Submission
Status:
(xSSSSSSSSS)(xSSSS)(xSSSS)(SSSSSSSSSS)
Subtask/Task Score:
{0/20}{0/30}{0/30}{0/20}
Score: 0
User: devilpoohs
Problemset: กองไฟ
Language: cpp
Time: 0.001 second
Submitted On: 2026-03-06 16:16:06
#include<bits/stdc++.h>
using namespace std;
vector<string> v;
const int mod=1e9+7;
int n;
int dp[160][55][55][55][3][3];
int think(int i,int a,int b,int c,int tpe,int& fnt){
if(i==0){
return 1;
}
if(dp[i][a][b][c][tpe][fnt]!=-1) return dp[i][a][b][c][tpe][fnt];
int cnt=0;
if(i==1){
if(tpe==0 and a>0){
if(fnt!=0){
cnt+=think(i-1,a-1,b,c,0,fnt);
cnt%=mod;
}
}
if(tpe==1 and b>0){
if(fnt!=1){
cnt+=think(i-1,a,b-1,c,1,fnt);
cnt%=mod;
}
}
if(tpe==2 and c>0){
if(fnt!=2){
cnt+=think(i-1,a,b,c-1,2,fnt);
cnt%=mod;
}
}
}else{
if(tpe==0 and a>0){
cnt+=think(i-1,a-1,b,c,1,fnt);
cnt%=mod;
cnt+=think(i-1,a-1,b,c,2,fnt);
cnt%=mod;
}else if(tpe==1 and b>0){
cnt+=think(i-1,a,b-1,c,0,fnt);
cnt%=mod;
cnt+=think(i-1,a,b-1,c,2,fnt);
cnt%=mod;
}else if(tpe==2 and c>0){
cnt+=think(i-1,a,b,c-1,1,fnt);
cnt%=mod;
cnt+=think(i-1,a,b,c-1,0,fnt);
cnt%=mod;
}
}
return dp[i][a][b][c][tpe][fnt]=cnt;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
memset(dp,-1,sizeof(dp));
int a,b,c;
cin>>n>>a>>b>>c;
int fnt=0;
int ans=think(n,a,b,c,0,fnt)%mod;
fnt=1;
ans+=think(n,a,b,c,1,fnt)%mod;
fnt=2;
ans+=think(n,a,b,c,2,fnt)%mod;
cout<<ans;
return 0;
}
/*
7
3 3 1
*/