FZU2107:Hua Rong Dao(DFS)
来源:互联网 发布:windows热键设置 编辑:程序博客网 时间:2024/05/16 05:06
Problem Description
Cao Cao was hunted down by thousands of enemy soldiers when he escaped from Hua Rong Dao. Assuming Hua Rong Dao is a narrow aisle (one N*4 rectangle), while Cao Cao can be regarded as one 2*2 grid. Cross general can be regarded as one 1*2 grid.Vertical general can be regarded as one 2*1 grid. Soldiers can be regarded as one 1*1 grid. Now Hua Rong Dao is full of people, no grid is empty.
There is only one Cao Cao. The number of Cross general, vertical general, and soldier is not fixed. How many ways can all the people stand?
Input
There is a single integer T (T≤4) in the first line of the test data indicating that there are T test cases.
Then for each case, only one integer N (1≤N≤4) in a single line indicates the length of Hua Rong Dao.
Output
Sample Input
Sample Output
Hint
Here are 2 possible ways for the Hua Rong Dao 2*4.
因为n最大为4,暴力搜索一下吧
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int d[4][2] = { {0, 0}, {0, 1}, {1, 0}, {1, 1} };int dir[3][3][2] = { { {0, 1}, {0, 0} }, { {1, 0}, {0, 0} }, { {0, 0} } };int cnt[3] = {2, 2, 1};int r, v[5][5], tmp;const int c = 4;bool ok(int k, int x, int y){ for (int i = 0; i< cnt[k]; i++) { int p = x + dir[k][i][0], q = y + dir[k][i][1]; if (p<= 0 || p >r) return false; if (q<= 0 || q >c) return false; if (v[p][q]) return false; } return true;}void clear(int k, int x, int y, int t){ for (int i = 0; i< cnt[k]; i++) { int p = x + dir[k][i][0], q = y + dir[k][i][1]; v[p][q] = t; }}void dfs(int x, int y){ if (y >c)x = x + 1, y = 1; if (x == r + 1) { tmp++; return; } if (v[x][y]) dfs(x, y + 1); for (int i = 0; i< 3; i++) { if (ok(i, x, y)) { clear(i, x, y, 1); dfs(x, y + 1); clear(i, x, y, 0); } }}int find(int x, int y){ memset(v, 0, sizeof(v)); for (int i = 0; i< 4; i++) v[x + d[i][0]][y + d[i][1]] = 1; tmp = 0; dfs(1, 1); return tmp;}int solve(){ int ans = 0; for (int i = 1; i< r; i++) { for (int j = 1; j< c; j++) { ans += find(i, j); } } return ans;}int main (){ int t[10]; for (r = 1; r<= 4; r++) { t[r] = solve(); } int cas, n; scanf("%d", &cas); while (cas--) { scanf("%d", &n); printf("%d\n", t[n]); } return 0;}
- FZU2107:Hua Rong Dao(DFS)
- FZU 2107 Hua Rong Dao(dfs)
- FZU 2107 Hua Rong Dao (DFS)
- FZU Problem 2107 Hua Rong Dao (打表 dfs)
- FOJ FZU 2017 Hua Rong Dao【DFS+打表】
- FZU 2107 Hua Rong Dao
- FZU - 2107 Hua Rong Dao
- fzu 2107 Hua Rong Dao
- fzu 2107 Hua Rong Dao(状态压缩)
- fzu 2107 Hua Rong Dao(回溯)
- FZU - 2107 Hua Rong Dao(回溯)
- FZU - 2107 Hua Rong Dao 回溯
- FZU 2107 Hua Rong Dao 递归回溯
- FZU 2107F - Hua Rong Dao
- FZU 2107 Hua Rong Dao_暴力dfs
- fzu 2107 Hua Rong Dao(状压dp)
- FZU 2107 Hua Rong Dao 轮廓线上的动态规划
- JOJ 2724 hua rong dao (最小割 拆点)[无代码]
- 双向链表的简单实现
- 使用Xcode自带的单元测试
- 如何让Canvas画笔填充满整个浏览器屏幕
- hadoop写mongodb问题记录(备忘)
- 用nmon监控Linux系统资源
- FZU2107:Hua Rong Dao(DFS)
- 改善C#程序的建议4:C#中标准Dispose模式的实现
- 结构体——使用结构体实现求平均成绩
- Duilib 下关于Gif的使用
- 第六章 图
- 服务器框架搭建随笔(2)
- C指针编程之道 ---第七次笔记
- ubuntu 下ffmpeg的编译
- 超级表格:要山寨Excel,还是与之Say Byebye?