由题意,我们其实会发现
对于每一种果汁,其对应的状态只有可能有7种
VA
VB
VC
VA+VB
VA+VC
VB+VC
VA+VB+VC
这道题就大大简化了
我们把所有果汁都读进来
每种状态取价格最小的(这才有可能最优)
(在这里我状压了一下,用二进制表示其种类)
之后爆搜即可
如果当前已满足(三种维生素都有了,答案就取min)
最后输出即可
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
using namespace std;
int bj[1005],zt[150],n;
long long ans=2147483647;
void dfs(int wz,long long an,int ztz)
{
if(ztz==7)
{
ans=min(ans,an);
return;
}
for(rii=wz+1;i<=7;i++)
{
if(zt[i]!=2147483647)
{
dfs(i,an+zt[i],ztz|i);
}
}
}
int main()
{
scanf("%d\n",&n);
for(rii=1;i<=149;i++)
{
zt[i]=2147483647;
}
for(rii=1;i<=n;i++)
{
bj[1]=0;
bj[2]=0;
bj[3]=0;
int ltt;
int ztz=0;
scanf("%d ",<t);
char l=getchar();
while(l!=10)
{
if(l=='A'&&bj[1]==0)
{
ztz|=1;
bj[1]=1;
}
if(l=='B'&&bj[2]==0)
{
ztz|=2;
bj[2]=1;
}
if(l=='C'&&bj[3]==0)
{
ztz|=4;
bj[3]=1;
}
l=getchar();
}
zt[ztz]=min(zt[ztz],ltt);
}
dfs(0,0,0);
if(ans>=2147483647)
{
cout<<"-1";
}
else
{
cout<<ans;
}
}
转载于:https://www.cnblogs.com/ztz11/p/9669955.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)