706C. Hard problem - Codeforces Solution C++

  Problem Link : 706C. Hard problem 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

#define ll long long int

int main()
{
	ll n;
	cin>>n;
	ll energy[n+1];
	string arr[n+1][2];
	ll dp[n+1][2];
	for(ll i=1;i<=n;i++)
		cin>>energy[i];
	for(ll i=1;i<=n;i++)
	{
		cin>>arr[i][0];
		arr[i][1]=arr[i][0];
		reverse(arr[i][1].begin(),arr[i][1].end());
	}
	string s;
	dp[1][0]=0;
	dp[1][1]=energy[1];
	bool flag=0;
	for(ll i=2;i<=n;i++)
	{
		s=arr[i][0];
		dp[i][0]=pow(10,15);
		dp[i][1]=pow(10,15);
		if(arr[i-1][0]<s || arr[i-1][0]==s)
			dp[i][0]=min(dp[i][0],dp[i-1][0]);
		if(arr[i-1][1]<s || arr[i-1][1]==s)
			dp[i][0]=min(dp[i][0],dp[i-1][1]);
		s=arr[i][1];
		if(arr[i-1][0]<s || arr[i-1][0]==s)
			dp[i][1]=min(dp[i][1],energy[i]+dp[i-1][0]);
		if(arr[i-1][1]<s || arr[i-1][1]==s)
			dp[i][1]=min(dp[i][1],energy[i]+dp[i-1][1]);
		
		if(dp[i][0]==pow(10,15) && dp[i][1]==pow(10,15))
		{
		    flag=1;
		    break;
		}
	}
    
	if(flag)
	    cout<<"-1";
	else
	    cout<<min(dp[n][0],dp[n][1]);
}

 

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