题目大意
回文序列是指左右对称的序列。例如1 2 3 2 1是回文序列,但是1 2 3 2 2就不是。我们会给定一个N×M的矩阵,你需要从这个矩阵中找出一个P×P的子矩阵,使得这个子矩阵的每一列和每一行都是回文序列。
分析
O(n^4)卡了过去,很神奇。
code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int f[500][500];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%d",&f[i][j]);
for (int l=min(n,m);l>=1;l--)
for (int i=1;i<=n-l+1;i++)
for (int j=1;j<=m-l+1;j++)
{
int flag=1;
for (int ii=0;ii<=l-1;ii++)
{
for (int jj=1;jj<=l/2;jj++)
if ((f[i+ii][j+jj-1]!=f[i+ii][j+l-jj])||(f[i+jj-1][j+ii]!=f[i+l-jj][j+ii]))
{
flag=0;
break;
}
if (!flag)
break;
}
if (flag)
{
printf("%d",l);
return 0;
}
}
}