➤ 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!!