➤ Problem Link : 1051D. Bicolorings
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define m 998244353
int main()
{
int n,k;
cin>>n>>k;
ll dp[n+1][k+1][2][2];
memset(dp,0,sizeof(dp));
dp[1][1][0][0]=1;
dp[1][1][1][1]=1;
dp[1][2][0][1]=1;
dp[1][2][1][0]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
dp[i][j][1][1]=(dp[i-1][j][1][1]+dp[i-1][j][1][0]+dp[i-1][j][0][1]+dp[i-1][j-1][0][0])%m;
dp[i][j][0][0]=(dp[i-1][j][0][0]+dp[i-1][j][1][0]+dp[i-1][j][0][1]+dp[i-1][j-1][1][1])%m;
dp[i][j][1][0]=(dp[i-1][j][1][0]+dp[i-1][j-1][0][0]+dp[i-1][j-1][1][1])%m;
if(j>=2)
dp[i][j][1][0]=(dp[i][j][1][0]+dp[i-1][j-2][0][1])%m;
dp[i][j][0][1]=(dp[i-1][j][0][1]+dp[i-1][j-1][0][0]+dp[i-1][j-1][1][1])%m;
if(j>=2)
dp[i][j][0][1]=(dp[i][j][0][1]+dp[i-1][j-2][1][0])%m;
}
}
cout<<(dp[n][k][0][1]+dp[n][k][0][0]+dp[n][k][1][0]+dp[n][k][1][1])%m;
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
