HDU-2234 无题I
为每个状态定义两个函数S和H,分别表示当前状态到列一致和行一致的目标状态的最少操作次数。
然后有了估价函数F=Min(S,H)就可以IDA*了。
#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue> #define rep(i, l, r) for(int i=l; i<=r; i++)
#define down(i, l, r) for(int i=l; i>=r; i--)
#define maxn 40320
#define MAX 1<<30 using namespace std; int t, n[][], k; inline void Up(int x) { int a; a = n[][x]; n[][x] = n[][x]; n[][x] = n[][x]; n[][x] = n[][x]; n[][x] = a; }
inline void Down(int x) { int a; a = n[][x]; n[][x] = n[][x]; n[][x] = n[][x]; n[][x] = n[][x]; n[][x] = a; }
inline void Right(int x) { int a; a = n[x][]; n[x][] = n[x][]; n[x][] = n[x][]; n[x][] = n[x][]; n[x][] = a; }
inline void Left(int x) { int a; a = n[x][]; n[x][] = n[x][]; n[x][] = n[x][]; n[x][] = n[x][]; n[x][] = a; } int S()
{
int b[], o, o2 = ;
rep(i, , )
{
rep(j, , ) b[j] = ; o = ;
rep(j, , ) b[n[j][i]]++;
rep(j, , ) o = max(o, b[j]);
o2 = max(o2, -o);
}
return o2;
} int H()
{
int b[], o, o2 = ;
rep(i, , )
{
rep(j, , ) b[j] = ; o = ;
rep(j, , ) b[n[i][j]]++;
rep(j, , ) o = max(o, b[j]);
o2 = max(o2, -o);
}
return o2;
} bool Search(int x)
{
if (x == k)
{
if (!S() || !H()) return true; else return false;
}
int now = min(S(), H()); if (now > k-x) return false;
Left(); if (min(S(), H()) <= now) if (Search(x+)) return true; Right();
Left(); if (min(S(), H()) <= now) if (Search(x+)) return true; Right();
Left(); if (min(S(), H()) <= now) if (Search(x+)) return true; Right();
Left(); if (min(S(), H()) <= now) if (Search(x+)) return true; Right();
Right(); if (min(S(), H()) <= now) if (Search(x+)) return true; Left();
Right(); if (min(S(), H()) <= now) if (Search(x+)) return true; Left();
Right(); if (min(S(), H()) <= now) if (Search(x+)) return true; Left();
Right(); if (min(S(), H()) <= now) if (Search(x+)) return true; Left();
Up(); if (min(S(), H()) <= now) if (Search(x+)) return true; Down();
Up(); if (min(S(), H()) <= now) if (Search(x+)) return true; Down();
Up(); if (min(S(), H()) <= now) if (Search(x+)) return true; Down();
Up(); if (min(S(), H()) <= now) if (Search(x+)) return true; Down();
Down(); if (min(S(), H()) <= now) if (Search(x+)) return true; Up();
Down(); if (min(S(), H()) <= now) if (Search(x+)) return true; Up();
Down(); if (min(S(), H()) <= now) if (Search(x+)) return true; Up();
Down(); if (min(S(), H()) <= now) if (Search(x+)) return true; Up();
return false;
} int main()
{
scanf("%d", &t);
while (t--)
{
rep(i, , ) rep(j, , ) scanf("%d", &n[i][j]);
k = ;
while (k <= )
if (Search()) break; else k++;
if (k == ) k = -; printf("%d\n", k);
}
return ;
}
HDU-2234 无题I的更多相关文章
- HDU 2236 无题II(二分图匹配+二分)
HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...
- HDU 2236 无题Ⅱ
HDU 2236 无题Ⅱ 题目大意 这是一个简单的游戏,在一个\(n*n\)的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. solution 暴枚\(i ...
- hdu 2234(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...
- Hdu 2236 无题II 最大匹配+二分
题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...
- HDU 1871 无题
无题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 2236 无题II 题解
题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\)表示\(T\)组数据. 对于每组数 ...
- 【最大匹配+二分答案】HDU 2236 无题II
题目内容 这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\ ...
- HDU 2236:无题II(二分搜索+二分匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...
- (二分匹配“匈牙利算法”)无题II --HDU --2236
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ...
- 无题II hdu 2236(二分枚举区间)
分析:只需要用二分找一个区间,然后不断枚举这个区间是否可以达到最大匹配,一直二分到答案为止. 代码: =============================================== ...
随机推荐
- Cocos2d-x——导入Cocostudio资源
(搬运自我在SegmentFault的博客) 目前正在和实训的小组成员一起做一款手机2D游戏,我们采用了Cocos2d-x进行开发.之前虽然早有耳闻,这次却是第一次认真地学习和使用Cocos2d-x. ...
- AJAX不能访问MVC后台程序的问题
AJAX不能访问后台的MVC有可能是MVC的后台程序加入了身份验证[Authorize]标记,这样前台的AJAX虽然结果显示的是4和200但是responsetext的值可以看到是返回了一个配置文件中 ...
- [dp uestc oj] G - 邱老师玩游戏
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- HTML5新增的音频标签、视频标签
我们所说的H5就是我们所说的HTML5中新增的语言标准 一.音频标签 在HTML5当中有一个叫做audio的标签,可以直接引入一段音频资源放到我们的网页当中 格式: <audio autopla ...
- iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)
CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器. Co ...
- 解决ubuntu上ifconfig没有eth0/ens33且无法上网的问题
ifconfig只有一个轮回端口lo,没有我们的网卡eth0,一开始以为是vsphere(新手对于vsphere不是很熟悉)上我的虚拟机配置问题,还查看了相关的网络配置,后来才知道是因为: 问题出在配 ...
- LeetCode 53题 最大子序和 -- JavaScript
解题思路分析: 该题是在一个整数数组中找到一个和最大的连续子数组,并返回和值.那么如何找到一个和最大的连续子数组呢?我们知道,这肯定需要遍历数组才行:好,那我们就开始遍历数组.首先,我们初始化最大和 ...
- 解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系
今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". ...
- linux 安装并且设置环境lua环境变量
在lua官网下载lua安装包并安装: http://www.lua.org/download.html 解压编译: wget http://www.lua.org/ftp/lua-5.3.2.tar. ...
- stataic 变量
static 是静态变量的的类型说明符 静态变量属于静态存储方式,(外部变量也是静态存储方式) 静态的局部变量 静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量在函数内定义 它的生存 ...