原题传送门:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1015

大致题意:给出一个矩阵,0表示空地,1表示有树,要求找出一个最大的矩形空地,输出其面积

解题思路:其实第一眼就联想到了UVA108(传送门http://blog.csdn.net/silence__bug/article/details/46891303),简化,然后暴搜。可以将每个点的数字转换为以这点为起点,向左最多有多少连续空地,那么我们只需要枚举每个矩形的右下角坐标,向上直接枚举其纵向长度,当然,横向长度直接取最大值。这样可以以o(n^3)的时间复杂度枚举每个可能的矩形

解题方案:预处理矩阵中元素,利用dp思想求出每个点左侧的空地数(包括自身),然后暴力枚举所有坐标,以这个坐标为右下角,向上搜索(即枚举纵向长度),不断更新可达到的最大横向宽度,得到此时的面积,从而更新能达到的最大面积S。

ac代码:

//0kb 147ms
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;int m,n,map[110][110];
int min(int a,int b){return a>b?b:a;}
int max(int a,int b){return a>b?a:b;}
int main()
{int t,j,k,l;while(scanf("%d%d",&m,&n)!=EOF&&(m||n)){memset(map,0,sizeof(map));              //初始化地图 for(j=1;j<=m;j++)for(k=1;k<=n;k++){scanf("%d",&l);if(l==0)map[j][k]=map[j][k-1]+1;    //预处理地图 }int s=0;for(j=1;j<=m;j++){for(k=1;k<=n;k++){int mi=map[j][k];               //mi为可达到的最大宽度,其实也就是所扩展到的点的最小值 int ss=mi;s=max(s,ss);                    //不扩展,面积即为mi本身 for(l=1;l<j;l++)                //枚举扩展的距离 {mi=min(mi,map[j-l][k]);     //更新mi ss=mi*(l+1);                //获取得到的矩形面积 s=max(s,ss);                //更新面积s }}}//  for(j=1;j<=m;j++){for(k=1;k<=n;k++)cout<<map[j][k]<<' ';cout<<endl;}        //打印地图,用于调试 printf("%d\n",s);                       //输出s }return 0;
}

小结:这个剪枝很重要,也就是对于问题的理解和转换,还有就是联想,此题与UVA108的做法非常相似,都是预处理地图然后枚举一个角坐标,然后扩展,更新能得到的最大值,其实有点像贪心了。。。。

有什么意见或者建议,欢迎指导~,有什么不理解的,也可以在留言板上提出,谢谢~~~

转载请注明出处:http://blog.csdn.net/silence__bug

UVA 10074 Take the Land dp/暴力+剪枝相关推荐

  1. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

  2. UVA 10074 Take the Land(最大子矩阵和变形)

    题目大意:输入矩阵,找出元素全为0的子矩阵的元素最大和. 解题策略:将0,1转换,动态规划中判断最长子区间和与当前列的大小的关系. /*UVA 10074 Take the LandAC by J.D ...

  3. uva 10074 Take the Land

    ps:博主为朱老师学生 这是一道和uva 108类似的题,值得注意的是最大空地初始为0 #include <cstdlib> #include <cstdio> #includ ...

  4. UVa 10074 - Take the Land

    这题和836一样,输入比那个简单的很多. /*************************************************************************> ...

  5. UVa 10074 Take the Land (转化思想最大子矩阵和)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sh ...

  6. UVa:10074 Take the Land

    不小心瞄到题目提示,于是联想到之前做过的求最大子矩阵和的那道题. 这道题很类似,但是有些不同的是,可以计算的只有是0的矩阵,如果出现1就不能计算. 所以在求每个一维数组和的时候要保证序列中没有1.如果 ...

  7. uva 1218 Perfect Service 树形dp

    // uva 1218 Perfect Service 树形dp // // 解题思路: // // d[u][0]表示节点本身是服务器 // d[u][1]表示节点的父节点是服务器 // d[u][ ...

  8. 【NOIP模拟题】【DP】【同余最短路】【暴力剪枝】2016.11.15 第二题 小L的牛栏 题解

    小L的牛栏 [题目描述] 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着 ...

  9. 数位dp ---- 暴力 + 二进制的数位dp 2020济南 L Bit Sequence

    题目链接 题目大意 f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数 给你一个数组[a1,a2,a3...,am]m∈[1,100][a_1,a_2,a_3. ...

最新文章

  1. Linux内存中的 buffer 和 cache 到底是个什么东东?
  2. 项目集跟进计划_项目延期,项目经理应该如何补救?
  3. Android开发中如何设置不显示标题和设置全屏
  4. 如何让Visual Studio 2010支持HTML5和CSS3
  5. SpringMVC框架--学习笔记(上)
  6. Win10自动更新关闭方法
  7. 重新安装SCCM 2012 client,解决Windows10 1909在线更新问题
  8. jquery页面滚动显示浮动菜单栏锚点定位效果
  9. Linux下MPlayer的安装
  10. 从头开始敲代码之《从BaseApplication/Activity开始》
  11. gradle下载及配置
  12. Java IO编程全解(六)——4种I/O的对比与选型
  13. 从mysql随机抽取数据_mysql随机抽取一定数量的记录实例讲解
  14. 使用串口打印系统时间
  15. 大数据分析师培训出来就业前景怎么样?数据分析有没有发展前景?
  16. linux 下numpy安装包,Linux下安装numpy
  17. Android EditText常用属性
  18. 仓储rfid文件_物联网RFID标签的四大主流应用场景
  19. 性能测试入门指南 (慎入: 6000 字长文)
  20. Java获取某年某月的第一天

热门文章

  1. 分治(二)——三分法学习笔记
  2. 数据结构之(二叉)堆
  3. MySQL——数据库 ——简单程序代码大全
  4. ftp常见错误代码记录下
  5. 细思极恐的“25号宇宙实验”的心理学启示:过于富足+缺乏边界=沉沦与毁灭?
  6. android 股票行情界面,Android版的股票行情K线图开发
  7. 深入理解RocketMQ Rebalance机制
  8. 理查马文价值导向选股法则
  9. CSS用flex布局两端对齐,列不满左对齐
  10. 比较DirectX和OpenGL的区别