Time Limit: 1000 MS Memory Limit: 131072 K

Description

Long time ago, a king occupied a vast territory.

Now there is a problem that he worried that he want to choose a largest square of his territory to build a palace.

Can you help him?

For simplicity, we use a matrix to represent the territory as follows:

0 0 0 0 0

0 1 0 1 0

1 1 1 1 0

0 1 1 0 0

0 0 1 0 0

Every single number in the matrix represents a piece of land, which is a 1*1 square

1 represents that this land has been occupied

0 represents not

Obviously the side-length of the largest square is 2



Input

The first line of the input contains a single integer t (1≤t≤5) — the number of cases.

For each case

The first line has two integers N and M representing the length and width of the matrix

Then M lines follows to describe the matrix

1≤N,M≤1000

Output

For each case output the the side-length of the largest square

Sample Input

2

5 5

0 0 0 0 0

0 1 0 1 0

1 1 0 1 0

0 1 1 0 0

0 0 1 0 0

5 5

0 0 0 0 0

0 1 0 1 0

1 1 1 1 0

0 1 1 0 0

0 0 1 0 0

Sample Output

1

2

#include<queue>
#include<stack>
#include<vector>
#include<math.h>
#include<cstdio>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std; const int INF=1e9+7;
const int maxn=1010;
typedef long long ll; //单调栈
//先做 poj 2559后再看单调栈可能会好理解一点
int a[1010][1010];
struct node
{
int idx,num;//下标和延伸值
};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%d",&a[i][j]);
if(a[i][j])
a[i][j]+=a[i-1][j];
}
a[i][m+1]=-1;
}
int ans=-1;
for(int i=1; i<=n; i++)
{
int top=0;
node vis[1010];
for(int j=1; j<=m+1; j++)
{
if(top==0)
{
vis[top].idx=j,vis[top++].num=1; }
else
{
printf("top=%d\n",top);
int v=vis[top-1].idx,cont=0;
while(top>0&&a[i][v]>=a[i][j])
{
cont+=vis[top-1].num;
if(cont>=a[i][v])
ans=max(ans,a[i][v]);
top--;
v=vis[top-1].idx;
}
vis[top].idx=j,vis[top++].num=cont+1;
printf("vis[top].idx=%d vis[top].num=%d\n",vis[top-1].idx,vis[top-1].num);
}
}
}
printf("%d\n",ans);
}
} //暴力
//先把每一列累加,类似于条形图,然后从每一行的开头开始遍历到每一行结束,
//(不过是因为这一题的后台数据水,
//暴力才能过,所以如果数据范围太大不推荐暴力)
int mp[maxn][maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m,x;
memset(mp,0,sizeof(mp));
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%d",&x);
if(x&&mp[i-1][j])
mp[i][j]=mp[i-1][j]+1;
else
mp[i][j]=x;
}
}
int maxx=0;
int k=1;//代表此时最大的面积
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(mp[i][j]>=k)
{
int p=0;
for(; mp[i][p+j]>=k; p++);//每一行从头遍历到尾
if(p>=k)
{
maxx=k;
k++;
}
}
}
}
printf("%d\n",maxx);
}
return 0;
} //动规
//以每一个点作为正方形的右上角,
//每次取四个角的最小值加一即为此时的最大面积(因为本题规定的每个矩形面积为1)
//自己画图可以理解的
int a[maxn][maxn];
int dp[maxn][maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
scanf("%d",&a[i][j]);
int ans=0;
for(int i=1; i<n; i++)
{
for(int j=1; j<m; j++)
{
if(a[i][j]==1)
{
dp[i][j]=min(dp[i][j-1],min(dp[i-1][j-1],dp[i-1][j]))+1;
}
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
}
}

king's trouble II SCU - 4488的更多相关文章

  1. ZOJ 2058 The Archaeologist's Trouble II(贪心+模拟)

    [题目大意] 一个n高的塔,由@ * ?三种字符组成.每行相邻两个字符不能相邻. '?' 表示未确定是 '@' 还是 '*' . 求'@' 可能出现的最多和最少次数. [分析] 在可以填的情况下 先填 ...

  2. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  3. stochastic noise and deterministic noise

    在机器学习中,导致overfitting的原因之一是noise,这个noise可以分为两种,即stochastic noise,随机噪声来自数据产生过程,比如测量误差等,和deterministic ...

  4. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout

    K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...

  5. UVA 11426 GCD - Extreme (II) (欧拉函数)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Problem JGCD Extreme (II)Input: Standard ...

  6. PID控制器(比例-积分-微分控制器)- II

    Table of Contents Practical Process Control Proven Methods and Best Practices for Automatic PID Cont ...

  7. HDU - 5201 :The Monkey King (组合数 & 容斥)

    As everyone known, The Monkey King is Son Goku. He and his offspring live in Mountain of Flowers and ...

  8. Saving Tang Monk II(bfs+优先队列)

    Saving Tang Monk II https://hihocoder.com/problemset/problem/1828 时间限制:1000ms 单点时限:1000ms 内存限制:256MB ...

  9. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】

    任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...

随机推荐

  1. sql server常用函数、常用语句

    一.常用函数 1.字符串函数 : charindex(':','abc:123')    --寻找一个字符在一段字符串中起始的位置 len('zhangsan')   --获取一段字符串的长度 lef ...

  2. 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)

    Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...

  3. Windows下搭建网络代理

    场景:有些场景下会出现局域网内的某些网段可能由于安全限制,不能访问外网,此时可以通过安装一些工具来实现借助局域网内某些能够上外网的电脑来实现网络代理的功能.以下工具均是使用于Window环境. 服务端 ...

  4. 今日文摘:浅谈 HTML5 的游戏化之路

    如今商业网站中用于广泛的HTML5无限下拉效果已经越来越受到游戏网站的喜爱.各个品牌为了打造专属自己的游戏特色,纷纷推出了模拟HTML5效果的品牌 站,且都起到了相当好的效果.可是从很多方面来说我们对 ...

  5. select多选框

    select多选框 效果: 代码: <HTML> <HEAD> <TITLE>选择下拉菜单</TITLE> <meta http-equiv=&q ...

  6. 【Linux 命令】fping ping 包间隔时间详解

    服务器间检查会用到fping的命令,期间遇到了一个问题,需要将ping包间的间隔时间设置为100毫秒,查看fping -h看下,找到了-i和-p两个参数: 看到这两个参数,我当时的表情是这样的: 看不 ...

  7. HBA 介绍

    1.首先介绍一下什么是HBA. 这里所说的HBA,全称FC HBA,也就是Fibre Channel Host Bus Adapter.在FC网络中,主机(如服务器)需要和FC网络.FC存储设备(如S ...

  8. JS日历控件特效代码layDate

    https://www.js-css.cn/a/jscode/date/2015/0405/1461.html

  9. PostGIS 操作geometry方法

    WKT定义几何对象格式: POINT(0 0) ——点 LINESTRING(0 0,1 1,1 2) ——线 POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2 ...

  10. jquery如何获取第一个或最后一个子元素

      jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children(" ...