题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4618

 #include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#define maxn 305
using namespace std; vector<int> G[maxn*maxn];
int a[maxn][maxn];
int maxp;
int N,M; bool find(int u,int v){
int d = G[u].size();
for(int i=;i<d;i++){
if(G[u][i] == v) return true;
}
return false;
}
bool JudgeRowPalindrome(int x1,int y1,int x2,int y2){
if(y1 >= y2) return true;
if(a[x1][y1] == a[x2][y2]){
if(find((x1)*N+y1+,(x2)*N+y2-)) return true;
if(JudgeRowPalindrome(x1,y1+,x2,y2-)){
G[x1*N+y1+].push_back(x2*N+y2-);
return true;
}
}
else return false;
}
bool JudgeColPalindrome(int x1,int y1,int x2,int y2){
if(x1 >= x2) return true;
if(a[x1][y1] == a[x2][y2]){
if(find((x1+)*N+y1,(x2-)*N+y2)) return true; if(JudgeColPalindrome(x1+,y1,x2-,y2)){
G[(x1+)*N+y1].push_back((x2-)*N+y2);
return true;
}
}
else return false; }
bool Judge(int x,int y,int len){
for(int i=x;i<x+len;i++)
if(!find(N*i+y,N*i+y+len-)) return false;
for(int i=y;i<y+len;i++)
if(!find(N*x+i,N*(x+len-)+i)) return false;
return true;
}
int main()
{
// if(freopen("input.txt","r",stdin)== NULL) {printf("Error\n"); exit(0);} int T;
cin>>T;
while(T--){
scanf("%d%d",&N,&M);
for(int i=;i<N;i++)
for(int j=;j<M;j++){
scanf("%d",&a[i][j]);
}
for(int i=;i<=N*M + N+M;i++) G[i].clear(); for(int row=;row<N;row++)
for(int i=;i<M;i++)
for(int j=i+;j<M;j++){
if(find(N*row+i,N*row+j) || a[row][i] != a[row][j]) continue;
bool flag = JudgeRowPalindrome(row,i,row,j);
if(flag) G[N*row+i].push_back(N*row+j);
}
for(int col=;col<M;col++)
for(int i=;i<N;i++)
for(int j=i+;j<N;j++){
if(find(N*i+col,N*j+col) || a[i][col] != a[j][col]) continue;
bool flag = JudgeColPalindrome(i,col,j,col);
if(flag==true) G[N*i+col].push_back(N*j+col);
}
maxp = ;
for(int i=;i<N;i++)
for(int j=;j<M;j++){
if(N-i <= maxp || M-j <= maxp) continue;
if(N--i >= M--j){
for(int k=M-;k>=j+maxp;k--){
if(find(N*i+j,N*i+k)){
int p = k-j+;
if(Judge(i,j,p)){
maxp = p;
}
}
}
}
else{
for(int k=N-;k>=i+maxp;k--){
if(find(N*i+j,N*k+j)){
int p = k-i+;
if(Judge(i,j,p)){
maxp = p;
}
}
}
}
}
printf("%d\n",maxp);
}
}

poj 4618 暴力的更多相关文章

  1. POJ 2182/暴力/BIT/线段树

    POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...

  2. poj 1840 暴力+标记

    Description Consider equations having the following form: a1x1 3+ a2x2 3+ a3x3 3+ a4x4 3+ a5x5 3=0 T ...

  3. POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一

    完全想不到啊,同余模定理没学过啊,想起上学期期末考试我问好多同学'≡'这个符号什么意思,都说不知道,你们不是上了离散可的吗?不过看了别人的解法我现在会了,同余模定理介绍及运用点这里点击打开链接 简单说 ...

  4. POJ 1166 暴力搜索 即 枚举

    e.... 米还是没有读懂题....T_T ..... e.... 这就是传说中的暴力吗....太血腥了....太暴力了...九重for循环....就这么赤裸裸的AC了.... 水是水了点..但是.. ...

  5. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  6. POJ 2249 暴力求组合数

    Binomial Showdown Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22692   Accepted: 692 ...

  7. Smith Numbers POJ - 1142 暴力递归枚举

    题意: 给你一个数x,把这个分解成素数之积(假设是x1*x2*x3),如果   x的每一数位的和   等于  x1每一数位的和加上x2每一数位的和加上x3每一数位的和,那么他就是题目要找的数 示例: ...

  8. POJ 2329 (暴力+搜索bfs)

    Nearest number - 2 Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3943 Accepted: 1210 De ...

  9. POJ 1661 暴力dp

    题意略. 思路: 很有意思的一个题,我采用的是主动更新未知点的方式,也即刷表法来dp. 我们可以把整个路径划分成横向移动和纵向移动,题目一开始就给出了Jimmy的高度,这就是纵向移动的距离. 我们dp ...

随机推荐

  1. 详解SQL Server 2005 Express下的事件探查器

    安装Visual Studio 2008会有附带的SQL Server 2005 Express版 我们开发一般都用那个都不单独安装SQL Server的 大家都知道express版的sql是没有 事 ...

  2. 【svn】server建立以及svn使用

    安装好VisualSVN Server后[安装过程看这里],运行VisualSVN Server Manger,下面是启动界面: 好的,下面我来添加一个代码库[Repository],如下图: 按上图 ...

  3. hibernate映射关系之多对多

    多对多: * 关系在第三张表中,和两张表本身没有关系 * 多对多谁维护关系:谁都能维护关系(效率是一样的),一般情况下可以通过页面 来体现 * 关系体现: 第三张表的维护:增加.删除 course类对 ...

  4. 《service》-“linux命令五分钟系列”之二

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  5. (二)跟我一起玩Linux网络服务:BIND的自动部署(附上完整的代码)

    2015-03-24   如果看了我之前写的文章 DNS服务——BIND(/etc/named.conf./var/named)设置实现和解释,再来看这篇文章,你会发现部署BIND是件很简单的事情 如 ...

  6. date日期比较和格式化方法

    时间的比较 var now = new Date();//现在时间 var setDate = new Date(2017,0,5,17,55,55);//设定的时间 laert(now < s ...

  7. js 实现tab选项卡

    最近一直在研究js  如果不及时复习的话前边学到的东西很快就会忘掉,所以把前段时间的一个简单的tab选项卡的思路写出来也算复习了一下吧, 第一步:先把布局写出来: <div id="d ...

  8. js实现placeholder效果

    <form name="testForm" action="" method=""> <input type=" ...

  9. Java导出Excel和CSV(简单Demo)

    Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...

  10. Zephyr-开发流程

    开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 :  物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...