洛谷 P4398 战役地图
枚举
\(O(n^7)\)
非哈希做法
题目数据\(50\),可以暴力枚举每一个位置某种边长的情况是否成立;
边长\(len\)从大到小遍历,一旦找到直接退出。
由于最坏情况\(n^7\)会超时,则通过“剪枝”将匹配的过程缩减;
最终的时间复杂度约为\(n^5\)。
AC code
#include <iostream>
using namespace std;
const int N=55;
int a[N][N],b[N][N];
int main()
{
//freopen("Input.txt","r",stdin);
//freopen("Output.txt","w",stdout);
int n; cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>b[i][j];
int len=n;
for(int len=n;len;len--)
for(int i=0;i<=n-len;i++)
for(int j=0;j<=n-len;j++)
{
for(int sx=0;sx<n;sx++)
for(int sy=0;sy<n;sy++)
{
bool is_success=true;
for(int x=0;x<len;x++)
for(int y=0;y<len;y++)
if(a[i+x][j+y]!=b[sx+x][sy+y])
{
is_success=false;
goto here;
}
here:
if(is_success)
{
cout<<len<<endl;
return 0;
}
}
}
cout<<len<<endl;
return 0;
}
本文来自博客园,作者:{三季野花},转载请注明原文链接:https://www.cnblogs.com/SanGarden/articles/16757088.html