动态规划专题
这道题我觉得不错,是一道基础动规
转移:
表示以点
为右下角的最大正方形的边长
那么转移方程就是
理解一下:
用样例理解一下
表示
的数值,为0的表明那里有树
例如 (3,4)这个点 , (2,4) 的边最多到(2,3),而(3,3)、(2,3)就只能是它自己,所以(3,4)只能也就只能到(2,3)。
其实你自己模拟一遍样例,也就理解了。
source:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int f[1005][1005],mp[1005][1005];
int main(){
int n,t,x,y;
scanf("%d%d",&n,&t);
for(int i=1;i<=t;i++)
{
scanf("%d%d",&x,&y);
mp[x][y]=1;
}
int ans=-1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(!mp[i][j])
{
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;
ans=max(f[i][j],ans);
}
}
}
printf("%d\n",ans);
return 0;
}