219C. Color Stripe - Codeforces Solution C++

  Problem Link : 219C. Color Stripe 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
int dp[500002][28];
 
void printVal(int n,int t,int k)
{
    if(n==0)
        return;
    int ans=INT_MAX;
    int v;
    for(int i=0;i<k;i++)
    {
        if(i==t)
            continue;
        if(dp[n-1][i] < ans)
        {
            ans=dp[n-1][i];
            v=i;
        }
    }
    printVal(n-1,v,k);
    char c = 'A'+v;
    cout<<c;
}
 
int main()
{
 
  int n,k;
  cin>>n>>k;
  string s;
  cin>>s;
  if(n==1)
  {
      cout<<"0\n";
      cout<<s;
      exit(0);
  }
  for(int i=0;i<k;i++)
    dp[0][i]=1;
 
  dp[0][s[0]-'A']=0;
  int ans=INT_MAX;
  for(int i=1;i<n;i++)
  {
    for(int j=0;j<k;j++)
    {
      int mn=INT_MAX;
      for(int m=0;m<k;m++)
        if(m!=j)
          mn=min(mn,dp[i-1][m]);
 
      if(s[i]-'A'==j)
        dp[i][j]=mn;
      else
        dp[i][j]=mn+1;    
 
      if(i==n-1)
        ans=min(ans,dp[i][j]);
    }
  }
 
  cout<<ans<<endl;
  
  printVal(n,-1,k);
 
}

 

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