Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)

Subtask/Task Score:

{20/20}{30/30}{30/30}{20/20}

Score: 100

User: krittaphot

Problemset: กองไฟ

Language: cpp

Time: 0.022 second

Submitted On: 2026-03-06 14:55:12

#include <bits/stdc++.h>

using namespace std;
long long n;
long long mem[151][51][51][3][3];
const int MOD = 1e9 + 7;
long long solve(long long idx,long long a,long long b,long long first,long long last){
	if(a < 0 || b < 0 ){
		return 0;
	}
	if(mem[idx][a][b][first][last] != -1){
		return mem[idx][a][b][first][last];
	}
	if (idx == n) {
    	return (a == 0 && b == 0 && last != first) ? 1 : 0;
	}
	if(last == 0)
		mem[idx][a][b][first][last] = (solve(idx+1,a,b-1,first,1) + solve(idx+1,a,b,first,2)) % MOD ;
	else if(last == 1)
		mem[idx][a][b][first][last] = (solve(idx+1,a-1,b,first,0) + solve(idx+1,a,b,first,2)) % MOD ;
	else
		mem[idx][a][b][first][last] = (solve(idx+1,a-1,b,first,0) + solve(idx+1,a,b-1,first,1)) % MOD ;
	

	return mem[idx][a][b][first][last];
}

int main()
{
	long long a,b,c;
	cin >> n >> a >> b >> c;
	memset(mem, -1, sizeof(mem));
	cout << (solve(1,a-1,b,0,0) + solve(1,a,b-1,1,1) + solve(1,a,b,2,2))% MOD;
}