Discussion About Minimum Set of Strings

This is Discussion thread about Minimum Set of Strings

#include
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
map<string,ll> msk;
map<pair<ll,ll>,ll> dp;
ll go(int pos,int n,int mask,vector<pair<string,ll>> &vec)
{
if(pos==n)
return INT_MAX;
if(dp.count({pos,mask}) or mask==7)
return dp[{pos,mask}];
dp[{pos,mask}]=min(vec[pos].second+go(pos+1,n,mask | msk[vec[pos].first],vec),go(pos+1,n,mask,vec));
return dp[{pos,mask}];

}
int main () {
ll n;
cin>>n;
vector v(n);
for(ll i=0;i<n;i++)
{
cin>>v[i];
if(v[i]==“ABC”)
msk[v[i]]=7;
else if(v[i]==“A”)
msk[v[i]]=4;
else if(v[i]==“B”)
msk[v[i]]=2;
else if(v[i]==“C”)
msk[v[i]]=1;
else if(v[i]==“AB”)
msk[v[i]]=6;
else if(v[i]==“AC”)
msk[v[i]]=5;
else if(v[i]==“BC”)
msk[v[i]]=3;
}
vector cost(n);
for(auto &i:cost)
cin>>i;
vector<pair<string,ll>> vec(n);
for(ll i=0;i<n;i++)
{
vec[i]={v[i],cost[i]};
}
cout<<go(0,n,0,vec)<<endl;
return 0;

}