BORW - Black or White - SPOJ Solution C++

  Problem Link : BORW 


👉 Hint : edit please

 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
int arr[202];
int dp[202][202][202];
int Unpaint(int i,int w,int b)
{
	if(i<1)
		return 0;
	int x=INT_MAX;
	int y=INT_MAX;
	int z=INT_MAX;
	
	
	
	if(arr[i]<arr[w])
	{
	    if(dp[i-1][i][b]==-1)
	        dp[i-1][i][b]=Unpaint(i-1,i,b);
	    x=dp[i-1][i][b];      
	}
	if(arr[i]>arr[b])
	{
	    if(dp[i-1][w][i]==-1)
	        dp[i-1][w][i]=Unpaint(i-1,w,i);
	    y=Unpaint(i-1,w,i);     
	}
	if(dp[i-1][w][b]==-1)
	    dp[i-1][w][b]=Unpaint(i-1,w,b);
	z=dp[i-1][w][b];    
	return dp[i][w][b]=min(x,min(y,1+z));    


}

int main()
{
	while(1)
	{
		int n;
		cin>>n;
		if(n==-1)
			break;
		memset(dp,-1,sizeof(dp));	
		for(int i=1;i<=n;i++)
			cin>>arr[i];
		arr[n+1]=INT_MAX;
		arr[0]=-1;
		cout<<Unpaint(n,n+1,0)<<endl;
	}

}

 

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