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.020 second
Submitted On: 2026-03-06 14:54:01
#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);
}