洛谷P1387 最大正方形
分析:画图模拟,发现以坐标(i,j)为右下顶点的正方形可以根据它左上方的三个点得到,就很轻松写出状态转移方程了。
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const double pi=acos(-1); int a[110][110]; int dp[110][110]; int main(){ int n,m;scanf("%d%d",&n,&m); int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)scanf("%d",&a[i][j]); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) if(a[i][j]) dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1,ans=max(ans,dp[i][j]); } cout<<ans<<endl; return 0; }