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