zoukankan      html  css  js  c++  java
  • HDU 6185(打表代码

    /** @xigua */
    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <stack>
    #include <cstring>
    #include <queue>
    #include <set>
    #include <string>
    #include <map>
    #include <climits>
    #define PI acos(-1)
    using namespace std;
    typedef long long LL;
    typedef double db;
    const int maxn = 1e5 + 5;
    const int mod = 1e9 + 7;
    const int INF = 1e8 + 5;
    const LL inf = 1e15 + 5;
    const db eps = 1e-6;
    int mp[15][15];
    int vis[15][15];
    int n;
    LL sum=0;
    int cnt=0;
    
    bool safe(int x, int y) {
        if (x>=0&&x<4&&y>=0&&y<n&&!vis[x][y])  return 1;
        return 0;
    }
    bool check() {
        for (int i=0; i<4; i++) {
            for (int j=0; j<n; j++) {
                if (!vis[i][j])  {
                    return 0;
                }
            }
        }
        return 1;
    }
    int findx() {
        for (int i=0; i<4; i++) {
            for (int j=0; j<n; j++) {
                if (!vis[i][j])  {
                    return i;
                }
            }
        }
        return -1;
    }
    int findy() {
        for (int i=0; i<4; i++) {
            for (int j=0; j<n; j++) {
                if (!vis[i][j])  {
                    return j;
                }
            }
        }
        return -1;
    }
    void dfs(int x, int y) {
        for (int k=0; k<2; k++) {
            if (k==0) { //1*2
                if(safe(x,y)&&safe(x+1,y)) {
                    vis[x][y]=2, vis[x+1][y]=2;
                    if (check())  {
                        sum++;
                        vis[x][y]=0, vis[x+1][y]=0;
                    }
                    else {
                        int xx=findx(), yy=findy();
                        if(xx!=-1&&yy!=-1) {
                            vis[x][y]=2, vis[x+1][y]=2;
                            dfs(xx,yy);
                            vis[x][y]=0, vis[x+1][y]=0;
                        }
                    }
    
                }
            }
            if (k==1) {  //2*1
                if (safe(x,y)&&safe(x,y+1)) {
                    vis[x][y]=1, vis[x][y+1]=1;
                        if (check())  {
                            sum++;
                            vis[x][y]=0, vis[x][y+1]=0;
                        }
                        else {
                                vis[x][y]=1, vis[x][y+1]=1;
                            int xx=findx(), yy=findy();
                            if(xx!=-1&&yy!=-1) {
                                dfs(xx,yy);
                                vis[x][y]=0, vis[x][y+1]=0;
                            }
                        }
                }
            }
        }
    }
    void solve() {
        scanf("%d", &n);
        sum=0;  cnt=0;
        memset(vis, 0, sizeof(vis));
        dfs(0, 0);
        cout<<"sum:"<<sum<<endl;
    }
    int main() {
        int t = 1, cas = 1;
        //freopen("in.txt", "r", stdin);
       // freopen("out.txt", "w", stdout);
        //scanf("%d", &t);
        while(t--) {
           // printf("Case %d: ", cas++);
            solve();
        }
        return 0;
    }
  • 相关阅读:
    codevs 1202 求和
    codevs 1201 最小数和最大数
    nyist 240 小明的调查统计(二)
    nyist28大数阶乘
    nyist 626 intersection set
    【】小技巧】CSS文字两端对齐
    Vue.js项目模板搭建
    25个最基本的JavaScript面试问题及答案
    java抽象类与接口的区别及用法
    JQuery事件手册
  • 原文地址:https://www.cnblogs.com/gggyt/p/7470649.html
Copyright © 2011-2022 走看看