#include <bits/stdc++.h>
using namespace std;
int n,c1,c2,a[10010],b[10010],ans=1e9;
int f(int x)
{
int res=0;
for(;x;x&=x-1) res++;
return res;
}
void DFS(int len,int cost)
{
if(len==1)
{
ans=min(ans,cost); //更新答案
return ;
}
for(int i=1;i<=n;i++)
{
if(a[i]==-1) continue; //代表这个数已经删除
for(int j=1;j<=n;j++)
{
if(a[j]==-1) continue; //代表这个数已经删除
else
{
int t1=a[i],t2=a[j];
t1^=t2; //算出xor值
int x=f(l); //算出lowbit值
if(x==1)
{
a[i]=-1;
DFS(len-1,cost+c1); //算代价
a[i]=b[i]; //回溯
a[j]=-1;
DFS(len-1,cost+c1); //算代价
a[j]=b[j]; //回溯
}
else if(x>1)
{
a[i]=-1;
DFS(len-1,cost+c2); //算代价
a[i]=b[i]; //回溯
a[j]=-1;
DFS(len-1,cost+c2); //算代价
a[j]=b[j]; //回溯
}
}
}
}
}
int main()
{
cin>>n;
cin>>c1>>c2;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i]; //记录一开始的a[i]
}
DFS(n,0);
cout<<ans;
return 0;
}
暴力DFS