问题 D: 盖房子(house)

时间限制: 1 Sec  内存限制: 64 MB
提交: 27  解决: 16
[提交][状态][讨论版]

题目描述

FJ最近得到了面积为n*m的一大块土地,他想在这块土地上建造一所房子,这个房子必须膏形的。但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分以至于根本不能在上面盖一砖一瓦。他希望找到一块最大的正方形无瑕疵土地来盖房子。不过,不是什么难题,FJ在10分钟内就轻松解决了这个问题。
现在,您也来试试吧。

输入

第1行为两个整数n,m(1≤n,m≤100)。接下来n行,每行m个数字,用空格隔开。0表萄土地有瑕疵,1表示该块土地完好。

输出

一个整数,最大正方形的边长。

样例输入

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1

样例输出

2

思路:自己对于动态规划还是不是很理解,每次做新题总是找不到状态转移方程。
看了网上的解释,总是感觉不清楚,自己想了想,恍然大悟。
可以建立一个数组s[n][m],存储以这个点为右下角的正方形的最大边长。
a[n][m]   0 1 1 1            s[n][m]对应地是   0 1 1 1
    1 1 1 0 1 1 2 2
      0 1 1 0 0 1 2 2
     1 1 0 1 1 1 0 1
状态方程:s[i][j]=min(s[i-1][j],s[i][j-1],s[i-1][j-1])+1;
优化: 观察s[n][m]每次只用那一行以及上一行,所以只需建立s[2][m]的数组就可以。 未优化:
#include <iostream>
#include <cstdio> using namespace std; #define minn(a,b,c) (a>b? b:a)>c ? c:(a>b? b:a) int main()
{
int n,m;//行列
int a[][]={};//存储地面状况
int ans=;//始终保存最大的边长
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
if(a[i][j]!=){
a[i][j]=(minn(a[i][j-],a[i-][j],a[i-][j-]))+;
ans=max(ans,a[i][j]);
}
}
}
printf("%d",ans);
return ;
}
优化代码:(错误!)
#include <iostream>
#include <cstdio> using namespace std; #define minn(a,b,c) (a>b? b:a)>c ? c:(a>b? b:a) int main()
{
int n,m;//行列
int a[][];//存储地面状况
int s[][];//s[i][j]表示以这个点为右下角的正方形的最大边长
int ans=;//始终保存最大的边长
scanf("%d %d",&n,&m);
for(int i=;i<n;i++){
for(int j=;j<m;j++){
scanf("%d",&a[i][j]);
if(i==){
s[][j]=a[i][j];
}
if(i==&&j==||j==&&i!=){
s[][]=a[][];
}
if(i!=&&j!=){
if(a[i][j]==){
s[][j]=;
}else{
s[][j]=minn(s[][j-],s[][j],s[][j-])+;
ans=max(ans,s[][j]);
}
}
}
if(i!=){
for(int k=;k<m;k++){
s[][k]=s[][k];
}
}
}
printf("%d",ans);
return ;
}

帮我找找错

PS:后来提交优化后的代码,也通过测试了,感觉思路正确,但就是WA!如果你发现错误请告知我。第一个代码是正确的。

这个题差点把我做疯!!!
 

 

【动态规划】盖房子(house)--未提交--已提交的更多相关文章

  1. 2106 Problem F Shuffling Along 中石油-未提交-->已提交

    题目描述 Most of you have played card games (and if you haven’t, why not???) in which the deck of cards ...

  2. 2078 Problem H Secret Message 中石油-未提交-->已提交

    题目描述 Jack and Jill developed a special encryption method, so they can enjoy conversations without wo ...

  3. 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

    一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...

  4. 论Postgres的“已提交的而且 xmin’比当前事务的XID小的记录对当前事务才是可见的”

    最近在网上看到这样一句话Postgres“已提交的而且 xmin 比当前事务的XID小的记录对当前事务才是可见的”.先不评断这句话的正确性:看下这句话的结构,因果关系: 按照此话的意思:要postgr ...

  5. git修改已提交记录的注释

    已提交暂存区但还未提交远端仓库 命令:git commit --amend -m 已提交远端仓库 命令:git rebase 可以参考:http://www.cnblogs.com/dudu/p/47 ...

  6. SQL Server 已提交读快照 测试

    1. 打开数据库 已提交读快照 选项 2. 数据库 已提交读快照 模式下的测试 a) 测试表 Test b) 开启事务1,更新数据C2 = '200'(未提交) BEGIN TRAN ' WHERE ...

  7. TortoiseSVN 忽略文件 忽略已提交文件

    主要以下两种情况: 1.首次提交就做好了忽略拦截:项目首次提交到svn服务器的时候,把该删的删了,然后设置忽略规则,就没问题了. 2.提交一段时间忽然想忽略拦截:经常碰到的,发现设置忽略规则后,没法生 ...

  8. SQL Server已提交读快照隔离级别的设置

    如果要把SQL Server数据库事务隔离级别设置为已提交读快照隔离 如果直接运行下面的语句: ALTER Database [mydbname] SET READ_COMMITTED_SNAPSHO ...

  9. svn命令行修改已提交的版本备注

    svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...

随机推荐

  1. DLX模型问题

    问题:sevenzero liked Warcraft very much, but he haven't practiced it for several years after being add ...

  2. visual studio各个版本的差异

  3. BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Statu ...

  4. 利用Spring中的HtmlUtils.htmlEscape(input)过滤html

    fatherModule.setModuelName(HtmlUtils.htmlEscape(fatherModule.getModuelName())); log.info(HtmlUtils.h ...

  5. 洛谷P1174 打砖块

    题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...

  6. Memory Allocation API In Linux Kernel && Linux Userspace、kmalloc vmalloc Difference、Kernel Large Section Memory Allocation

    目录 . 内核态(ring0)内存申请和用户态(ring3)内存申请 . 内核态(ring0)内存申请:kmalloc/kfree.vmalloc/vfree . 用户态(ring3)内存申请:mal ...

  7. C++中argc和argv

    C++中argc和argv C/C++中关于main()函数中argc 和argv[]的说明 main(int argc,char *argv[]); argc代表命令行输入参数的个数 argv存储了 ...

  8. 回顾bidirectional path tracing

    最近因为研究需要,回顾了一下BDPT,主要看VEACH的那篇论文,同时参考了pbrt,mitsuba的实现,自己写了一份新的bdpt实现.以前实现的那一份BDPT不是基于物理的,而且无法处理镜面和透明 ...

  9. memcache的内存回收机制

    memcache不会释放内存,而是重新利用. 在缓存的清除方面,memcache是不释放已分配内存.当已分配的内存所在的记录失效后,这段以往的内存空间,memcache只会重复利用. memcache ...

  10. javascript console 函数详解 js开发调试的利器

    Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该对象 可以输出信息到 Console 窗口中. 使用 alert 不是一样可以显示 ...