king's trouble II SCU - 4488
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的更多相关文章
- ZOJ 2058 The Archaeologist's Trouble II(贪心+模拟)
[题目大意] 一个n高的塔,由@ * ?三种字符组成.每行相邻两个字符不能相邻. '?' 表示未确定是 '@' 还是 '*' . 求'@' 可能出现的最多和最少次数. [分析] 在可以填的情况下 先填 ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- stochastic noise and deterministic noise
在机器学习中,导致overfitting的原因之一是noise,这个noise可以分为两种,即stochastic noise,随机噪声来自数据产生过程,比如测量误差等,和deterministic ...
- 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 ...
- UVA 11426 GCD - Extreme (II) (欧拉函数)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Problem JGCD Extreme (II)Input: Standard ...
- PID控制器(比例-积分-微分控制器)- II
Table of Contents Practical Process Control Proven Methods and Best Practices for Automatic PID Cont ...
- HDU - 5201 :The Monkey King (组合数 & 容斥)
As everyone known, The Monkey King is Son Goku. He and his offspring live in Mountain of Flowers and ...
- Saving Tang Monk II(bfs+优先队列)
Saving Tang Monk II https://hihocoder.com/problemset/problem/1828 时间限制:1000ms 单点时限:1000ms 内存限制:256MB ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...
随机推荐
- Codeforces Round #191 (Div. 2) B. Hungry Sequence(素数筛选法)
. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Linux高级编程--02.gcc和动态库
在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include <stdlib.h> #include <stdio ...
- 写一个简易浏览器、ASP.NET核心知识(3)
前言 先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我. 这篇文章的标题有点大,其实挺low的,我需要在开头解释一下.我这里只想写一个小的控制台,旨在模拟浏览器的htt ...
- Daily Report-1126
今日: 上午主要是回顾了react,阅读官方文档的时候发现了list中key值设计的必要性. 看了部分react源码,发现有些吃力,在询问羽牧学长之后调整策略,从redux和mobx入手,先多熟悉用法 ...
- Double类型的数向上取整和向下取整
- hash算法搜索获得api函数地址的实现,"kernel32.dll", "CreateThread"
我们一般要获得一个函数的地址,通常采用的是明文,例如定义一个api函数字符串"MessageBoxA",然后在GetProcAddress函数中一个字节一个字节进行比较.这样弊端很 ...
- 【Linux学习】python脚本直接运行与nohup运行结果不同
之前遇到问题,在云主机上运行python脚本直接运行与nohup运行结果不同,甚至nohup根本运行不出来. 后来参考下别人的博客,终于知道问题了. nohup 使用的python版本问题. 而且no ...
- KKT条件和拉格朗日乘子法详解
\(\frac{以梦为马}{晨凫追风}\) 最优化问题的最优性条件,最优化问题的解的必要条件和充分条件 无约束问题的解的必要条件 \(f(x)\)在\(x\)处的梯度向量是0 有约束问题的最优性条件 ...
- 记点事! oracle 调用外部命令
oracle执行系统命令 测试成功环境:windows XP+oracle 10g.window 2008 R2 + 11g 代码如下: www.2cto.com Sql代码 crea ...
- 窗口生效函数UpdateData
Invalidate()使整个窗口客户区无效.窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘.这时Windows会在应用程序 ...