1051D. Bicolorings - Codeforces Solution C++

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