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:23:24
#include<bits/stdc++.h>
using namespace std;
vector<string> v;
const int mod=1e9+7;
int n;
int fnt=0;
int dp[160][55][55][55][3];
int think(int i,int a,int b,int c,int tpe){
if(i==0){
return 1;
}
// if(dp[i][a][b][c][tpe]!=-1) return dp[i][a][b][c][tpe];
int cnt=0;
if(i==1){
if(tpe==0 and a>0){
if(fnt!=0){
cnt+=think(i-1,a-1,b,c,0);
cnt%=mod;
}
}
if(tpe==1 and b>0){
if(fnt!=1){
cnt+=think(i-1,a,b-1,c,1);
cnt%=mod;
}
}
if(tpe==2 and c>0){
if(fnt!=2){
cnt+=think(i-1,a,b,c-1,2);
cnt%=mod;
}
}
}else{
if(tpe==0 and a>0){
cnt+=think(i-1,a-1,b,c,1);
cnt%=mod;
cnt+=think(i-1,a-1,b,c,2);
cnt%=mod;
}else if(tpe==1 and b>0){
cnt+=think(i-1,a,b-1,c,0);
cnt%=mod;
cnt+=think(i-1,a,b-1,c,2);
cnt%=mod;
}else if(tpe==2 and c>0){
cnt+=think(i-1,a,b,c-1,1);
cnt%=mod;
cnt+=think(i-1,a,b,c-1,0);
cnt%=mod;
}
}
return cnt;
// return dp[i][a][b][c][tpe]=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 ans=think(n,a,b,c,0)%mod;
memset(dp,-1,sizeof(dp));
fnt=1;
ans+=think(n,a,b,c,1)%mod;
memset(dp,-1,sizeof(dp));
fnt=2;
ans+=think(n,a,b,c,2)%mod;
cout<<ans;
return 0;
}
/*
7
3 3 1
*/