您的位置:首页 > 其它

[CODEVS P2594]解药还是毒药

2017-08-08 17:05 381 查看
原题链接

二进制是好文明

谁敢反对二进制我就打爆谁的苟头

状态压缩真是太神奇辣

将得病的状态转换成二进制存储起来

初始时病全得

通过药剂

进行BFS

达到健康状态

其实一开始还纠结了一下

到底是记种类还是记数目

但是果然还是记数目啦

记种类根本不可做嘛

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define LL long long
#define MOD 1000000007
#define pi 3.141592653589
using namespace std;

int n,m,i,j,med,ill[105],cure[105],s,h,t,f[1050],ans[1050],num[1050],p;

int main()
{
scanf("%d%d",&n,&m);

for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&med);

ill[i]<<=1;
cure[i]<<=1;

if(med==1) cure[i]++;
if(med==-1) ill[i]++;
}

cure[i]=(~cure[i]);
}

s=(1<<n)-1;
h=1;
t=1;
f[s]=1;
ans[h]=0;
num[h]=s;

while(h<=t)
{
if(num[h]==0)
{
printf("%d",ans[h]);
return 0;
}

for(i=1;i<=m;i++)
{
p=(num[h]&cure[i]);
p=(p|ill[i]);

if(!f[p])
{
t++;
ans[t]=ans[h]+1;
f[p]=1;
num[t]=p;
}
}

h++;
}

printf("The patient will be dead.");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二进制 bfs