zoukankan      html  css  js  c++  java
  • [JSOI2008]Blue Mary的战役地图

    暴力水过系列

    数据范围这么小,就打暴力吧

    枚举最大公共子矩阵的边长O(n)

    枚举两个最大公共子矩阵的左上角O(n^4)

    判断是否相同O(n^2)

    总复杂度O(n^7),显然过不了

    过不了怎么办,删冗余枚举啊

    一堆优化:

    1,倒序枚举边长,一旦满足,即为答案

    2,判断是否相同,一旦不同,跳出去

    然后就过了

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int a[2][60][60],n,ans;
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<2;i++)
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
                    scanf("%d",&a[i][j][k]);
        for(int l=n;l>=1;l--)
            for(int x1=1;x1<=n-l+1;x1++)
                for(int y1=1;y1<=n-l+1;y1++)
                    for(int x2=1;x2<=n-l+1;x2++)
                        for(int y2=1;y2<=n-l+1;y2++)
                        {
                            bool p=0;
                            for(int x=0;x<l;x++)
                            {
                                for(int y=0;y<l;y++)
                                {
                                    if(a[0][x1+x][y1+y]!=a[1][x2+x][y2+y])
                                        p=1;
                                    if(p)
                                        break;
                                }
                                if(p)
                                    break;
                            }
                            if(!p)
                            {
                                printf("%d
    ",l);
                                return 0;
                            }
                        }
        return 0;
    }
  • 相关阅读:
    第二次作业
    第一次软件测试
    activity带数据跳转
    学生注册界面
    activity_main
    购物商城
    2021.4.14JSP第七周作业
    2021.4.7jsp第六周作业
    2021.3.26JSP第四次作业
    2021/3/10 第二次JSP作业
  • 原文地址:https://www.cnblogs.com/ivanovcraft/p/9737561.html
Copyright © 2011-2022 走看看