算法刷题:p1387 最大正方形

算法刷题:p1387 最大正方形_第1张图片

解题思路:

利用动态规划的思想设置一个标记数组flag[][],flag[i][j]用来记录矩阵op[][]中以op[i][j]为右下角的子矩阵中最大的正方形边长,那么动态方程就是 flag[i][j]=min(flag[i-1][j],min(flag[i-1][j-1],flag[i][j-1]))+1;左侧和上方以及左上方中最小值+1

#include
using namespace std;
int op[109][109];
int flag[109][109];
int main(void){
    int n,m;
    int ans=0;
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            cin>>op[i][j];
            if(op[i][j]==1){
                flag[i][j]=min(flag[i-1][j],min(flag[i-1][j-1],flag[i][j-1]))+1;
                ans=max(ans,flag[i][j]);
           }
        }
    }   
    cout<

你可能感兴趣的:(算法)