Submission
Status:
(-SSSSSSSSS)(-SSSS)(xSSSS)(SSSSSSSSSS)
Subtask/Task Score:
{0/20}{0/30}{0/30}{0/20}
Score: 0
User: hmmm
Problemset: กองไฟ
Language: cpp
Time: 0.014 second
Submitted On: 2025-06-24 11:41:08
#include<bits/stdc++.h>
using namespace std;
using ll=long long int;
const int N=155,MOD=1e9+7;
int dp[N][N][N][5],n;
inline int rec(int a,int b,int c,int x,int t){
if(dp[a][b][c][x]!=-1) return dp[a][b][c][x];
if(a+b+c==n-1){
if(t==1 && a!=0) return 1;
if(t==2 && b!=0) return 1;
if(t==3 && c!=0) return 1;
}
ll cnt=0;
if(x!=1) cnt+=rec(a-1,b,c,1,t),cnt%=MOD;
if(x!=2) cnt+=rec(a,b-1,c,2,t),cnt%=MOD;
if(x!=3) cnt+=rec(a,b,c-1,3,t),cnt%=MOD;
return dp[a][b][c][x]=cnt;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
memset(dp,-1,sizeof dp);
int a,b,c;
cin >> n >> a >> b >> c;
ll sum=0;
sum+=rec(a-1,b,c,1,1),sum%=MOD;
sum+=rec(a,b-1,c,2,2),sum%=MOD;
sum+=rec(a,b,c-1,3,3),sum%=MOD;
cout << sum;
}