博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3647 Tetris
阅读量:5245 次
发布时间:2019-06-14

本文共 5777 字,大约阅读时间需要 19 分钟。

HDU_3647

    一开始不知道暴力搜就能过,后来看别人的题解说直接暴搜加回溯,于是自己也就直接写了个回溯,基本都是写好一段之后直接不停地cpoy、改参数,所以导致代码比较搓……

#include
#include
int N, M;char a[15];void init(){ for(int i = 0; i < 10; i ++) scanf("%s", a + i);}int dfs(int cur, int *H){ if(cur == 10) return 1; int i, h[40]; memcpy(h, H, sizeof(h)); if(a[cur] == 'I') { for(i = 0; i <= M - 4; i ++) if(h[i] < N && h[i] == h[i + 1] && h[i] == h[i + 2] && h[i] == h[i + 3]) { ++ h[i], ++ h[i + 1], ++ h[i + 2], ++ h[i + 3]; if(dfs(cur + 1, h)) return 1; -- h[i], -- h[i + 1], -- h[i + 2], -- h[i + 3]; } for(i = 0; i < M; i ++) if(h[i] + 4 <= N) { h[i] += 4; if(dfs(cur + 1, h)) return 1; h[i] -= 4; } } else if(a[cur] == 'J') { for(i = 0; i <= M - 3; i ++) if(h[i] + 2 <= N && h[i] == h[i + 1] && h[i] == h[i + 2]) { h[i] += 2, ++ h[i + 1], ++ h[i + 2]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i + 1], -- h[i + 2]; } for(i = 1; i < M; i ++) if(h[i] + 3 <= N && h[i] == h[i - 1]) { h[i] += 3, ++ h[i - 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i - 1]; } for(i = 2; i < M; i ++) if(h[i] + 2 <= N && h[i] + 1 == h[i - 1] && h[i - 1] == h[i - 2]) { h[i] += 2, ++ h[i - 1], ++ h[i - 2]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i - 2]; } for(i = 0; i <= M - 2; i ++) if(h[i] + 3 <= N && h[i] + 2 == h[i + 1]) { h[i] += 3, ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i + 1]; } } else if(a[cur] == 'L') { for(i = 2; i < M; i ++) if(h[i] + 2 <= N && h[i] == h[i - 1] && h[i] == h[i - 2]) { h[i] += 2, ++ h[i - 1], ++ h[i - 2]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i - 2]; } for(i = 1; i < M; i ++) if(h[i] + 3 <= N && h[i] + 2 == h[i - 1]) { h[i] += 3, ++ h[i - 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i - 1]; } for(i = 0; i <= M - 3; i ++) if(h[i] + 2 <= N && h[i] + 1 == h[i + 1] && h[i + 1] == h[i + 2]) { h[i] += 2, ++ h[i + 1], ++ h[i + 2]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i + 1], -- h[i + 2]; } for(i = 0; i <= M - 2; i ++) if(h[i] + 3 <= N && h[i] == h[i + 1]) { h[i] += 3, ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i + 1]; } } else if(a[cur] == 'O') { for(i = 0; i <= M - 2; i ++) if(h[i] + 2 <= N && h[i] == h[i + 1]) { h[i] += 2, h[i + 1] += 2; if(dfs(cur + 1, h)) return 1; h[i] -= 2, h[i + 1] -= 2; } } else if(a[cur] == 'S') { for(i = 1; i <= M - 2; i ++) if(h[i] + 2 <= N && h[i] == h[i - 1] && h[i] + 1 == h[i + 1]) { h[i] += 2, ++ h[i - 1], ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i + 1]; } for(i = 1; i < M; i ++) if(h[i] + 3 <= N && h[i] + 1 == h[i - 1]) { h[i] += 2, h[i - 1] += 2; if(dfs(cur + 1, h)) return 1; h[i] -= 2, h[i - 1] -= 2; } } else if(a[cur] == 'T') { for(i = 1; i <= M - 2; i ++) if(h[i] + 2 <= N && h[i] == h[i - 1] && h[i] == h[i + 1]) { h[i] += 2, ++ h[i - 1], ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i + 1]; } for(i = 1; i < M; i ++) if(h[i] + 3 <= N && h[i] + 1 == h[i - 1]) { h[i] += 3, ++ h[i - 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i - 1]; } for(i = 1; i <= M - 2; i ++) if(h[i] + 2 <= N && h[i] + 1 == h[i - 1] && h[i - 1] == h[i + 1]) { h[i] += 2, ++ h[i - 1], ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i + 1]; } for(i = 0; i <= M - 2; i ++) if(h[i] + 3 <= N && h[i] + 1 == h[i + 1]) { h[i] += 3, ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 3, -- h[i + 1]; } } else if(a[cur] == 'Z') { for(i = 1; i <= M - 2; i ++) if(h[i] + 2 <= N && h[i] == h[i + 1] && h[i] + 1 == h[i - 1]) { h[i] += 2, ++ h[i - 1], ++ h[i + 1]; if(dfs(cur + 1, h)) return 1; h[i] -= 2, -- h[i - 1], -- h[i + 1]; } for(i = 0; i <= M - 2; i ++) if(h[i] + 3 <= N && h[i] + 1 == h[i + 1]) { h[i] += 2, h[i + 1] += 2; if(dfs(cur + 1, h)) return 1; h[i] -= 2, h[i + 1] -= 2; } } return 0;}void solve(){ int h[40]; memset(h, 0, sizeof(h)); printf("%s\n", dfs(0, h) ? "Yes" : "No");}int main(){ while(scanf("%d%d", &M, &N), N) { init(); solve(); } return 0; }

 

 

转载于:https://www.cnblogs.com/staginner/archive/2012/09/06/2673481.html

你可能感兴趣的文章
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书汇总贴
查看>>