vijosP1026毒药?解药?

Posted invoid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vijosP1026毒药?解药?相关的知识,希望对你有一定的参考价值。

hash。

怎么感觉叫状态压缩bfs比较合适呢?

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 10 + 5;
const int maxm = 100 + 10;
const int maxg = 1024 + 10;

bool st[maxn],h[maxg];
int mp[maxm][maxn];
int d[maxg][maxn];
int n,m,finish;

inline int Hash(bool a[]) {
    int x=1,s=0;
    for(int i=1;i<=n;i++) {
        s+=x*a[i];
        x*=2;        
    }
    return s;
}

void bfs() {
    int l=0,r=1;
    finish=(1<<n)-1;
    while(l<r) {
        for(int i=1;i<=m;i++) {
            for(int j=1;j<=n;j++) {
                if(mp[i][j]==1) st[j]=1;
                else if(mp[i][j]==-1) st[j]=0;
                else st[j]=d[l][j];    
            }
            int x=Hash(st);
            if(x==finish) {
                printf("%d\n",d[l][0]+1);    
                return;
            }
            if(!h[x]) {
                h[x]=1;
                d[r][0]=d[l][0]+1;
                for(int j=1;j<=n;j++) d[r][j]=st[j];
                r++;    
            }
        }
        l++;
    }
    printf("The patient will be dead.\n");
}

int main() {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            scanf("%d",&mp[i][j]);
    bfs();
    return 0;
}

以上是关于vijosP1026毒药?解药?的主要内容,如果未能解决你的问题,请参考以下文章

codevs2594解药还是毒药(状压dp)

2594 解药还是毒药

解药还是毒药 codevs2594 状态压缩 BFS

Tyvj3308毒药解药题解

当人工智能遇上“全球头号网红” 元宇宙是毒药还是解药?

Codeforces 835E. The penguin's game