题解 P1387 【最大正方形】

Nemlit

2017-11-08 20:21:29

Solution

#一道关于搜索的题 这道题可以用搜索来做,判断如果是一个·正方形就往下延伸,再让ans++,在选取最大的ans即可。我第一次提交90分,就是因为多了一句话(已经注释掉),不需要判断x+1,y+1这个点,这是多余的! ```cpp #include<bits/stdc++.h> using namespace std; bool a[105][105]={0}; int n,m,ans,xx,yy,maxn; int dfs(int x,int y){ // if(!a[x+1][y+1])//多余 // return 0; for(int i=xx;i<=x;i++)//检测正方形的左边 if(!a[i][y]) return 0; for(int j=yy;j<=y;j++)//检测正方形的下面 if(!a[x][j]) return 0; ans++;//让ans++并更新新的正方形 dfs(x+1,y+1); return ans;//若反回此处则返回ans } int main(){ //freopen("1387.in ","r",stdin); //freopen("1387.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)//离线输入 cin>>a[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)//枚举每个点 if(a[i][j]){//枚举左上角的点 xx=i;//记录起始点的位置 yy=j; ans=0;//清空ans maxn=max(maxn,dfs(i,j));//求出dfs(i,j)的最大值 } cout<<maxn; return 0; } ```