Que - https://www.codechef.com/AUG20B/problems/CHEFWED

Soln - https://www.codechef.com/viewsolution/36607877

```
#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;
typedef long long int lli;
lli upr,k,n;
vector<lli> vec(5000);
void solve(map<lli,lli> &mp,lli fst,lli cst){
if(cst>=upr)
return;
if(fst==n){
upr=cst;
return;
}
mp[vec[fst]]++;
if(mp[vec[fst]]==1)
solve(mp,fst+1,cst);
else if(mp[vec[fst]]==2){
solve(mp,fst+1,cst+2);
map<lli,lli> mp1;
mp1[vec[fst]]++;
solve(mp1,fst+1,cst+k);
}
else{
map<lli,lli> mp1;
mp1[vec[fst]]++;
solve(mp1,fst+1,cst+k);
solve(mp,fst+1,cst+1);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
lli t,T,i,j,tabs,cst,temp,cur,fst,lst,flg;
cin>>T;
for(t=0;t<T;t++){
cin>>n>>k;
for(i=0;i<n;i++)
cin>>vec[i];
tabs=1;
vector<lli> cnt(101,0);
for(i=0;i<n;i++){
if(cnt[vec[i]]==0)
cnt[vec[i]]=1;
else{
for(j=1;j<=100;j++)
cnt[j]=0;
cnt[vec[i]]=1;
tabs++;
}
}
upr=tabs*k;
if(k==1)
cout<<upr<<"\n";
else if(T==100){
map<lli,lli> mp;
solve(mp,0,k);
cout<<upr<<"\n";
}
else{
map<lli,lli> mp;
tabs=1;
for(i=0;i<n;i++)
mp[vec[i]]++;
cst=INT_MAX;
fst=0;lst=0;
while(1){
cur=0;
flg=0;
for(j=1;j<=100;j++)
cnt[j]=0;
for(i=fst;i<n;i++){
if(cnt[vec[i]]==1 && flg==0){
lst=i;
flg=1;
}
if(cnt[vec[i]]==0){
cnt[vec[i]]=1;
if(mp[vec[i]]>1)
cur+=mp[vec[i]];
}
}
for(i=fst;i<lst;i++)
mp[vec[i]]--;
fst=lst;
temp=k*tabs+cur;
cst=min(temp,cst);
tabs++;
if(cur==0)
break;
}
cout<<cst<<"\n";
}
}
return 0;
}
```