题目链接: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. HTML5+移动APP(2)

    原理: html 页面负责内容: ui 负责页面样式: js 负责调用原生app方法. html5: html5这部分负责页面,也就是app中你看到的东西,大概的架构和内容 ui: mui 介绍:和H ...

  2. Android开发---支付宝功能接口(支付功能)(转载!)

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  3. sql 作业+游标 自动备份数据库

    前言 昨天有个同事在客户的服务器上面弄数据库,不小心执行了一条 sql 语句 TRUNCATE TABLE xxx 碉堡了吧,数据全没了  - - ,然后就是在网上拼命的搜索关于数据恢复的软件,搞了一 ...

  4. HashMap HashTable HashSet

    原文转载自 http://blog.csdn.net/wl_ldy/article/details/5941770 HashMap是新框架中用来代替HashTable的类 也就是说建议使用HashMa ...

  5. confluence5.8.10的使用

    之前在windows上安装了confluence5.8.10,结果有一天知什么缘故,数据库数据损坏,知识库彻底打不开了,所有的文档都付之东流,真的不是一般心痛.因此考虑将其装到linux机器上,因为t ...

  6. 算法系列之图--BFS

    广度优先搜索以源结点s为出发点,算法始终将已发现和未发现结点之间的边界,沿其广度方向向外扩展.也即算法需要在发现所有距离源结点s为k的所有结点之后才会去发现距离源结点距离为k+1的其他结点. talk ...

  7. 用python选择及显示三级目录,可返回上层目录以及随时跳出。

    # -*- coding: utf-8 -*-"""Created on Fri Jul 29 09:43:38 2016 @author: yinggang" ...

  8. STM32学习笔记——DMA控制器(向原子哥学习)

    一.DMA简介 DMA,全称为:Direct Memory Access,即直接存储器访问,DMA 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.当 CPU 初始化这个传输动作,传输 ...

  9. RunLoop-b

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...

  10. OrCAD PSpice仿真库模型

    说明:本介绍包含了\capture\library\pspice和capture\library\pspice\advanls目录下所有库,但由于作者水平有限,介绍得也比较简单,有些说明可能不一定对. ...