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