UVA 1603 Square Destroyer
来源:互联网 发布:java hmacmd5 编辑:程序博客网 时间:2024/05/29 16:54
这个题目的搜索思路在于对正方形从边长为1的标准开始找起,判断每个正方形在没有破坏情况下包含哪些边,以及计算出没有破坏的情况下的周长和当前情况下的周长,便于后续的搜索与判断。具体实现见如下代码:
#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>using namespace std;int ind;int T,n,k;int sticks[100];int square_size[100];int cur_size[100];int contain[100][100];int Depth;int getId1(int x,int y){return (2 * n + 1)*x + y;}int getId2(int x,int y){return (2 * n + 1)*x + y + n;}void Init(){ind = 0;memset(square_size,0,sizeof(square_size));memset(cur_size, 0, sizeof(cur_size));for (int i = 0; i < 100; i++) sticks[i] = 1;memset(contain,0,sizeof(contain));for (int i = 0; i < k; i++){int t;cin >> t;sticks[t-1] = 0;}for (int i = 1; i <= n; i++){for (int x = 0; x <= n - i; x++){for (int y = 0; y <= n - i; y++){square_size[ind] = 4 * i;cur_size[ind] = 0;for (int j = 0; j < i; j++){int a, b, c, d;a = getId1(x, y + j);b = getId1(x + i, y + j);c = getId2(x + j, y);d = getId2(x + j, y + i);contain[ind][a] = 1;contain[ind][b] = 1;contain[ind][c] = 1;contain[ind][d] = 1;cur_size[ind] += sticks[a] + sticks[b] + sticks[c] + sticks[d];}ind++;}}}}int find_exist(){for (int i = 0; i < ind; i++){if (square_size[i] == cur_size[i]) return i;}return -1;}bool Solve(int cur_d){int id = find_exist();if (id == -1) return true;if (cur_d >= Depth) return false;for (int i = 0; i < 2 * n*(n + 1); i++){if (contain[id][i]){for (int j = 0; j < ind; j++){if (contain[j][i]) cur_size[j]--;}if (Solve(cur_d + 1)) return true;for (int j = 0; j < ind; j++){if (contain[j][i]) cur_size[j]++;}}}return false;}int main(){int T;cin >> T;while (T--){cin >> n >> k;Init();for (Depth = 1;; Depth++){if (Solve(0)) break;}cout << Depth << endl;}return 0;}
阅读全文
0 0
- UVA 1603 Square Destroyer
- Square Destroyer UVA
- 1603 - Square Destroyer
- 1603 - Square Destroyer
- ZOJ 1031 Square Destroyer
- ZOJ1031 Square Destroyer
- UVa1603 - Square Destroyer
- POJ 1084 Square Destroyer
- POJ 1084 Square Destroyer
- POJ1084-Square Destroyer
- 搜索 HOJ 1320 Square Destroyer
- *搜索 HOJ 1320 Square Destroyer
- POJ 1084 Square Destroyer 笔记
- JOJ 1052: Square Destroyer解题报告
- 【IDA*+位运算】PKU-1084-Square Destroyer
- [DLX重复覆盖] poj 1084 Square Destroyer
- POJ 1084 Square Destroyer A*,BFS
- POJ 1084 Square Destroyer【Dancing Links重复覆盖】
- nginx配置同一个域名手机端请求时跳转手机域名
- activeMQ延时发送
- AIDL数据传递 CopyOnWriteArrayList
- 求序列的最大子序列和的问题
- 行为型-策略模式(strategy)
- UVA 1603 Square Destroyer
- plsql中null与0比较永远为false
- 两个头文件相互包含问题
- 《Java源码分析》:ReentrantLock.lock 锁机制
- 餐饮大数据-系统架构模块设计
- ButterKnife8.4的坑
- BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 贪心lca/点分治
- 当前页面指定位置变色
- Android SQLite数据存储