对于洛谷P1387 最大正方形的基于二位前缀和的解法

————————————本文旨在讨论交流计算机知识,欢迎指正—————————————

对于洛谷P1387 最大正方形的基于二位前缀和的解法_第1张图片

看到此题,笔者的第一印象就是正方形和边长,之间有开方的关系。

既然题目给了1是正方形的判定指标 ,那么思路也就很简单了,如果某一块的和开方和边长相等即满足题目要求,用max(x,y)来更新边长;

如此,我们首先想到的方法即二位前缀和:

   cin>>n>>m;
    int a[n][m];
    int pre[n][m];
    for(int i=0;i>a[i][j];
                }
        }
    for(int i=0;i

下一步,则是边长的匹配了:

这里笔者选用枚举法,即枚举边长,如果满足则更新记录res答案,并l++,继续枚举看是否成功,如果满足则再次自增和更新记录......

上代码:

  int res=0;
    int l=1;
    for(int i=0;i

最后输出res即可;

下面附上完整代码:

#include
using namespace std;
int n,m;
int main()
{
    cin>>n>>m;
    int a[n][m];
    int pre[n][m];
    for(int i=0;i>a[i][j];
                }
        }
    for(int i=0;i

 

希望能对你有所帮助!

你可能感兴趣的:(算法,c++,学习,c语言,动态规划)