Submission

Status:

(PPPPPPPPPP)(PTSSS)(-SSSS)(SSSSSSSSSS)

Subtask/Task Score:

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

Score: 20

User: krittaphot

Problemset: กองไฟ

Language: cpp

Time: 1.095 second

Submitted On: 2026-03-06 14:46:57

#include <bits/stdc++.h>

using namespace std;
int n;
int mem[151][51][51][3][3] = {-1};
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;
	int mem[n][a][b][3][3];
	cout << solve(0,a,b,0,0);
}