题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2868

用暴力也过了:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<string>
#include<set>
#define LL long long
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b) using namespace std; int a[1050][1050];
int n,m;
int ans = 0; int test(int x, int y, int len)
{
    for(int i = x; i<x+len; i++)
    for(int j = y; j<y+len; j++)
    {
        if(a[i][j]==0) return 0;
    }
    return 1;
} int main()
{
    while(scanf("%d%d",&n,&m) && (m||n))
    {
        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])
            for(int len = 1; j+len-1<=m && i+len-1<=n; len++)
            {
                if(len<=ans)//这一步很重要,如果长度都比ans小,那再去比较也无意义了。少了这一句就少时了。
                    continue;                 if(test(i,j,len))
                    ans = MAX(ans,len);                 else break;
            }
        }
        printf("%d\n",ans);     }
    return 0;
}

然后使用dp,画图找找规律。dp[i][j]为当前格子作为右下角能达到的最大正方形边长,可知dp[i][j] 只与dp[i-1][j] ,dp[i][j-1] ,dp[i-1][-1j]有关。所以可以得到状态转移方程:dp[i][j] = 1 + MMIN(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
#include<set>
#define LL long long
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
#define MMIN(a,b,c) (MIN(a,b)<c?MIN(a,b):c) using namespace std; int a[1050][1050];
int dp[1050][1050]; int n,m;
int ans = 0; int main()
{
while(scanf("%d%d",&n,&m) && (m||n))
{
ans = 0;
for(int i = 1; i<=n; i++)
for(int j = 1; j<=m; j++)
{
dp[i][j] = 0;
scanf("%d",&a[i][j]);
if(a[i][j])
{
dp[i][j] = 1 + MMIN(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]);
} ans = MAX(dp[i][j],ans);
}
printf("%d\n",ans);
}
return 0;
}

UVALive - 4867 —— dp的更多相关文章

  1. UVALive 4867 Maximum Square 贪心

    E - Maximum Square Time Limit:4500MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  2. UVAlive 6131 dp+斜率优化

    这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...

  3. UVALive 4764 dp

    DES: 这是一个新的游戏.给你一套牌.编号从1到100000.正常来说.你手中的牌和这次翻的牌是一样的,就会加一分.但是.如果是999的话.加三分.所以问你最大的分是多少. 貌似是简单的DP吧.(D ...

  4. UVALive - 6952 DP 分段/隔板

    题意:商品总价按四舍五入计算,n个物品最多可分\(d+1\)段,求最小代价 \(dp[i][j]\):\(j\)个物品分\(i\)段 注意一个技巧是只在需要分出新的段时才四舍五入(旧段结算),这样就避 ...

  5. UVALive 4731 dp+贪心

    这个题首先要利用题目的特性,先贪心,否则无法进行DP 因为求期望的话,越后面的乘的越大,所以为了得到最小值,应该把概率值降序排序,把大的数跟小的系数相乘 然后这种dp的特性就是转移的时候,由 i推到i ...

  6. 大白第一章第四节dp例题

    入口 UVALive - 3882 #include<cstdio> using namespace std; ; int n,m,k,f[N]; int main(){ //f[i]表示 ...

  7. Todolist

    UValive 6041(KD tree) UValive 6042(DP) UValive 6044(图论)

  8. UVALive - 3942 Remember the Word[Trie DP]

    UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...

  9. 状压DP uvalive 6560

    // 状压DP uvalive 6560 // 题意:相邻格子之间可以合并,合并后的格子的值是之前两个格子的乘积,没有合并的为0,求最大价值 // 思路: // dp[i][j]:第i行j状态下的值 ...

随机推荐

  1. 服务器SSL/TLS快速检测工具TLLSSLed

    服务器SSL/TLS快速检测工具TLLSSLed   现在SSL和TLS被广泛应用服务器的数据加密中,如网站的HTTPS服务.所以,在渗透测试中如何快速检测服务器的SSL和TLS配置寻找安全漏洞,就显 ...

  2. UvaLive 4287 Proving Equivalences 强连通缩点

    原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  3. eclipse 添加 maven 小结

    今天想创建了一个maven项目,由于之前重装系统,maven的一些配置要重新进行配置,y有时候一点小问题那真是一路曲折,为防止之后再遇到此问题,小结一下吧! 环境: eclipse   apache- ...

  4. Flex 布局教程学习

    转载自:阮一峰的网络日志(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html) 网页布局(layout)是 CSS 的一个重点应用. 布局 ...

  5. hadoop之hdfs及其工作原理

    hadoop之hdfs及其工作原理 (一)hdfs产生的背景 随着数据量的不断增大和增长速度的不断加快,一台机器上已经容纳不下,因此就需要放到更多的机器中,但这样做不方便维护和管理,因此需要一种文件系 ...

  6. [反汇编练习] 160个CrackMe之033

    [反汇编练习] 160个CrackMe之033. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  7. 实践认识--ANN

    1. 常用激活函数  激活函数的选择是构建神经网络过程中的重要环节,下面简要介绍常用的激活函数. (1) 线性函数 ( Liner Function ) (2) 斜面函数 ( Ramp Functio ...

  8. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  9. 百科知识 isz文件如何打开

    使用UltraISO可以打开

  10. 谈一次Linux的木马攻击数据爆满造成的Mysql无法启动

    起初以为是mysql它们之间的扩展没有开启! 后来发现,木马的确使它初始化了,最开始没有用图形化界面 而后,修改并且开启所有pdo扩展 VIM基本操作(除了插入,其它的命令前提是按ESC): 插入: ...