zoukankan      html  css  js  c++  java
  • uva11471 Arrange the Tiles(DP)

    此题的状态是当前用了那些,和四个位置各自的颜色。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int t;
    char block[14][4];
    bool vis[14];
    int belong[14],dp[1<<12+2][5][5][5][5];
    int to(char c){
        if(c=='Z') return 0;
        else if(c=='R') return 1;
        else if(c=='G') return 2;
        else if(c=='B') return 3;
        else return 4;
    }
    bool ok(int x,int y,char up,char left){
        if(x%3==0){
            return block[y][0]==up||up=='Z';
        }else{
            return (block[y][0]==up||up=='Z')&&(block[y][3]==left||left=='Z');
        }
    }
    int DP(int num,char x1,char x2,char x3,char x4){
        if(num==12) return 1;
        int now=0;
        for(int i=0;i<12;i++){
            if(!vis[i]) now|=(1<<i);
        }
        int f1=to(x1),f2=to(x2),f3=to(x3),f4=to(x4);
        if(dp[now][f1][f2][f3][f4]!=-1) return dp[now][f1][f2][f3][f4];
        int ret=0;
        for(int i=0;i<12;i++){
            if(!vis[i]&&ok(num,i,x1,x4)){
                vis[i]=1;
                belong[num]=i;
                if(num%3==2) ret+=DP(num+1,x2,x3,block[i][2],'Z');
                else ret+=DP(num+1,x2,x3,block[i][2],block[i][1]);
                belong[num]=-1;
                vis[i]=0;
            }
        }
        return dp[now][f1][f2][f3][f4]=ret;
    }
    void solve(int ca){
        memset(vis,0,sizeof vis);
        memset(dp,-1,sizeof dp);
        memset(belong,-1,sizeof belong);
        printf("Case %d: %d
    ",ca,DP(0,'Z','Z','Z','Z'));
    }
    int main(){
        //freopen("11471.txt" , "r" , stdin);
        scanf("%d",&t);
        for(int ca=1;ca<=t;ca++){
            for(int i=0;i<12;i++) scanf("%s",block[i]);
            solve(ca);
        }
        return 0;
    }
    uva11471
  • 相关阅读:
    树莓派开机启动
    树莓派连接18b20测温度
    树莓派VNC
    树莓派python 控制GPIO
    树莓派笔记
    用nohup执行python程序时,print无法输出
    mysql 函数应用
    mysql 正则表达式判断是否数字
    mysql select into 不支持
    tushare
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3540749.html
Copyright © 2011-2022 走看看