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;
}