Red Huang

Red Huang

uva 11795

Advanced Mask, also utilizing the principle of combinations and permutations in DP.

First, let's see if there are any weapons that can kill this enemy without having killed it previously.

//  
//        GGGGGGGGGGGGG        CCCCCCCCCCCCC               AAA  
//     GGG::::::::::::G     CCC::::::::::::C              A:::A  
//   GG:::::::::::::::G   CC:::::::::::::::C             A:::::A  
//  G:::::GGGGGGGG::::G  C:::::CCCCCCCC::::C            A:::::::A  
// G:::::G       GGGGGG C:::::C       CCCCCC           A:::::::::A  
//G:::::G              C:::::C                        A:::::A:::::A  
//G:::::G              C:::::C                       A:::::A A:::::A  
//G:::::G    GGGGGGGGGGC:::::C                      A:::::A   A:::::A  
//G:::::G    G::::::::GC:::::C                     A:::::A     A:::::A  
//G:::::G    GGGGG::::GC:::::C                    A:::::AAAAAAAAA:::::A  
//G:::::G        G::::GC:::::C                   A:::::::::::::::::::::A  
// G:::::G       G::::G C:::::C       CCCCCC    A:::::AAAAAAAAAAAAA:::::A  
//  G:::::GGGGGGGG::::G  C:::::CCCCCCCC::::C   A:::::A             A:::::A  
//   GG:::::::::::::::G   CC:::::::::::::::C  A:::::A               A:::::A  
//     GGG::::::GGG:::G     CCC::::::::::::C A:::::A                 A:::::A  
//        GGGGGG   GGGG        CCCCCCCCCCCCCAAAAAAA                   AAAAAAA  
#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <algorithm>  
#include <cmath>  
#include <climits>  
#include <vector>  
#include <set>  
#include <map>  
#include <queue>  
#include <cctype>  
#include <utility>  
#include <ctime>  
using namespace std;  
#ifdef DEBUG  
#define debug(...) printf("DEBUG: "),printf(__VA_ARGS__)  
#define gettime() end_time=clock();printf("now running time is %.7f\\n",(float)(end_time - start_time)/CLOCKS_PER_SEC);  
#else  
#define debug(...)  
#define gettime()  
#endif  
typedef unsigned int uint;  
typedef long long int Int;  
#define Set(a,s) memset(a,s,sizeof(a))  
#define Write(w) freopen(w,"w",stdout)  
#define Read(r) freopen(r,"r",stdin)  
#define Pln() printf("\\n")  
#define I_de(x,n)for(int i=0;i<n;i++)printf("%d ",x[i]);Pln()  
#define De(x)printf(#x"%d\\n",x)  
#define For(i,x)for(int i=0;i<x;i++)  
#define CON(x,y) x##y  
#define Pmz(dp,nx,ny)for(int hty=0;hty<ny;hty++){for(int htx=0;htx<nx;htx++){\\  
    printf("%d ",dp[htx][hty]);}Pln();}  
#define M 20  
#define PII pair<int,int>  
#define PB push_back  
#define oo INT_MAX  
#define Set_oo 0x3f  
#define FOR(it,c) for(vector<PII>::iterator it=(c).begin();it!=(c).end();it++)  
#define eps 1e-6  
clock_t start_time=clock(), end_time;  
bool xdy(double x,double y){return x>y+eps;}  
bool xddy(double x,double y){return x>y-eps;}  
bool xcy(double x,double y){return x<y-eps;}  
bool xcdy(double x,double y){return x<y+eps;}  
int min3(int x,int y,int z){  
    int tmp=min(x,y);  
    return min(tmp,z);  
}  
int max3(int x,int y,int z){  
    int tmp=max(x,y);  
    return max(tmp,z);  
}  
int w;  
int bw[M];  
int killget[1<<17];  
Int dp[1<<17];  
int n;  
void solve(){  
    Set(dp,0);  
    Set(killget,0);  
    killget[0]=w;  
    for(int i=1;i<(1<<n);i++){  
        killget[i]=killget[0];  
        for(int j=0;j<n;j++){  
            if((i>>j)&1)killget[i]|=bw[j];  
        }  
    }  
    dp[0]=1;  
    for(int i=1;i<(1<<n);i++){  
        for(int j=0;j<n;j++){  
            if(((i>>j)&1)&&((killget[i^(1<<j)]>>j)&1)){  
                dp[i]+=dp[i^(1<<j)];  
            }  
        }  
    }  
    printf("%lld\\n",dp[(1<<n)-1]);  
}  
int main() {  
    ios_base::sync_with_stdio(0);  
    char str[20];  
    int test;  
    scanf("%d",&test);  
    int ff=0;  
    while(test--){  
        scanf("%d",&n);  
        scanf("%s",str);  
        w=0;  
        Set(bw,0);  
        for(int i=0;i<n;i++){  
            if(str[i]-'0')w|=(1<<i);  
        }  
        for(int i=0;i<n;i++){  
            scanf("%s",str);  
            for(int j=0;j<n;j++){  
                if(str[j]-'0'){  
                    bw[i]|=(1<<j);  
                }  
            }  
        }  
        printf("Case %d: ",++ff);  
        solve();  
    }  
}  

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.