题面自己拿 ↓
http://codevs.cn/problem/2594/
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct dqs
{
int c,z;
};
int mf[110][15],n,m;
bool used[20000];
queue <dqs> q;
int bfs()
{
q.push((dqs){0,(1<<n)-1});
while (!q.empty())
{
dqs x=q.front();
q.pop();
used[x.z]=1;
for(int i=0;i<m;i++)
{
int z=x.z;
for(int j=0;j<n;j++)
{
if(mf[i][j]==1) //放入解药
z&=(1<<j)^((1<<n)-1);
else if(mf[i][j]==-1) //查看是否有解药
z|=(1<<j);
}
if(z==0)
return x.c+1;
if(!used[z])
q.push((dqs){x.c+1,z});
}
}
return -1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",&mf[i][j]);
int ans=bfs();
if(ans>0) printf("%d",ans);
else puts("The patient will be dead.");
return 0;
}