题意:
想要得到ABC,所需要的最小花费是多少。
思路:
由于给出的是ABC,又有不用类型的搭配,与二进制很相似,所以我们用二进制来表示。每次计算得到当前二进制数的最优解。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 10;
const int inf = 0x3f3f3f3f;
int arr[8];
char b[MAX];
int main()
{
memset(arr,inf,sizeof(arr));
arr[0] = 0;
int n , c;
string s;
cin >> n;
while(n--)
{
int ss = 0;
cin >> c >> s;
int len = s.size();
for(int i = 0 ; i < len ; i++)
{
ss|=1<<(s[i]-'A');//转换为2进制数
}
for(int i = 0 ; i < 8 ; i++)
{
arr[i|ss]=min(arr[i|ss],arr[i]+c);//取最小
}
}
if(arr[7]==inf)
cout << -1 << endl;
else
cout << arr[7] << endl;
return 0;
}