HDU 6185(打表代码
Posted gggyt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于HDU 6185(打表代码的主要内容,如果未能解决你的问题,请参考以下文章