Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPP-SSSSS)

Subtask/Task Score:

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

Score: 80

User: krittaphot

Problemset: กองไฟ

Language: cpp

Time: 0.014 second

Submitted On: 2026-03-06 14:49:31

#include <bits/stdc++.h>

using namespace std;
int n;
int mem[151][51][51][3][3];
int solve(int idx,int a,int b,int first,int 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(idx == 0){
		mem[idx][a][b][first][last] = solve(idx+1,a-1,b,0,0) + solve(idx+1,a,b-1,1,1) + solve(idx+1,a,b,2,2);
	}
	else{
		if(last == 0)
			mem[idx][a][b][first][last] = solve(idx+1,a,b-1,first,1) + solve(idx+1,a,b,first,2);
		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);
		else
			mem[idx][a][b][first][last] = solve(idx+1,a-1,b,first,0) + solve(idx+1,a,b-1,first,1);
	}

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

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