[OIBH] 糖果盒(Candy Box)——又一个最大子矩形

http://codewaysky.sinaapp.com/problem.php?id=1056

 

这题和奶牛浴场略有区别,奶牛浴场只需要求出最大子矩形,而这题要求的是最大权重子矩形,不一定要最大的面积,但要最大的权重和

思路是先求出每个最大子矩形,然后求出每个矩形的左上点和右下点,然后用二维数转数组进行求和,保存最优解

 

View Code
  1 #include<iostream>
  2 #include<string>
  3 #include<algorithm>
  4 #include<stdio.h>
  5 #include<memory.h>
  6 using namespace std;
  7 
  8 int sum[1010][1010];
  9 int v[1010][1010];
 10 int l[1010],r[1010],h[1010];
 11 int n,m;
 12 
 13 //****************************//树状数组
 14 int lowbit(int x)
 15 {
 16     return x&-x;
 17 }
 18 
 19 void add(int x,int y,int w)
 20 {
 21     int i,j;
 22     for(i=x;i<=n;i+=lowbit(i))
 23     {
 24         for(j=y;j<=m;j+=lowbit(j))
 25             sum[i][j]+=w;
 26     }
 27 }
 28 
 29 int get_sum(int x,int y)
 30 {
 31     int i,j,ans=0;
 32     for(i=x;i>0;i-=lowbit(i))
 33     {
 34         for(j=y;j>0;j-=lowbit(j))
 35         {
 36             ans+=sum[i][j];
 37         }
 38     }
 39     return ans;
 40 }
 41 //*****************************//
 42 
 43 int find(int x1,int y1,int x2,int y2)
 44 {
 45     return get_sum(x2,y2)-get_sum(x1-1,y2)-get_sum(x2,y1-1)+get_sum(x1-1,y1-1);
 46 }
 47 
 48 int main()
 49 {
 50     int i,j,w,x1,x2,y1,y2;
 51     freopen("D:\\in.txt","r",stdin);
 52     while(scanf("%d%d",&n,&m)==2)
 53     {
 54         memset(sum,0,sizeof(sum));
 55         memset(v,0,sizeof(v));
 56         for(i=1;i<=n;i++)
 57         {
 58             for(j=1;j<=m;j++)
 59             {
 60                 scanf("%d",&w);
 61                 if(!w)
 62                     v[i][j]=1;
 63                 else
 64                     add(i,j,w);
 65             }
 66         }
 67         for(i=0;i<=m;i++)
 68         {
 69             h[i]=0;l[i]=1;r[i]=m;
 70         }
 71         int lm,rm,ans=0,temp;
 72         for(i=1;i<=n;i++)
 73         {
 74             lm=1;
 75             for(j=1;j<=m;j++)
 76             {
 77                 if(!v[i][j])
 78                 {
 79                     h[j]++;
 80                     if(lm>l[j])
 81                         l[j]=lm;
 82                 }
 83                 else
 84                 {
 85                     h[j]=0; //边界不能有洞,所以障碍点高度是0,而不是1
 86                     l[j]=1;
 87                     r[j]=m;
 88                     lm=j+1; //由于边界不能有洞,所以加1
 89                 }
 90             }
 91             rm=m;
 92             for(j=m;j>0;j--)
 93             {
 94                 if(r[j]>rm)
 95                     r[j]=rm;
 96                 if(h[j])
 97                 {
 98                     y1=l[j];y2=r[j]; //处理出举行的左上点和右下点
 99                     x1=i-h[j]+1;x2=i;
100                     temp=find(x1,y1,x2,y2);  //利用二维数转数组进行求和
101                     if(temp>ans)
102                         ans=temp;
103                 }
104                 else
105                     rm=j-1; //同理减一
106             }
107         }
108         printf("%d\n",ans);
109     }
110     return 0;
111 }

转载于:https://www.cnblogs.com/ka200812/archive/2012/09/30/2709217.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度面试

1 算法&#xff1a;写LRU算法 2 算法思想&#xff0c;二维矩阵中查找一个数&#xff0c;矩阵的按行递增和按列递增。 3 将int i的一个数转换为大端形式&#xff0c;例如0x1a2b3c4d为0x4d3c2b1a。 4 已知一随机发生器&#xff0c;产生0的概率是p&#xff0c;产生1的概率是1-p&am…

日本第一赘婿!他入赘近20年拿下诺贝尔奖,成名后不忘教光棍讨老婆......

全世界只有3.14 % 的人关注了爆炸吧知识谁能凭感性要诺贝尔奖私有1949年12月10号&#xff0c;日本民众发出了暌违多年的欢呼声&#xff0c;因为诺贝尔奖史无前例地颁给了一位日本物理学家——汤川秀树。报道汤川秀树获奖新闻的报纸获奖后&#xff0c;在自传《旅人&#xff1a;一…

xs128 双定时器PIT0和PIT1

/***************************************************************** ** 函数说明&#xff1a;xs128 双定时器PIT0和PIT1 ** 版 本&#xff1a;V1.00 ** 修 改&#xff1a;庞辉 芜湖联大飞思卡尔工作室 …

修改mongodb最大查询数_WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除

#Java#Spring#SpringBoot#Mongo#reactor#webflux#数据库#新增#修改#查询#删除#Spring Boot WebFlux Mongo数据库新增、删除、查询、修改视频讲解 : https://www.bilibili.com/video/av84240038/Employee.javapackage com.example.spring.webfluxmongo;import lombok.AllArgsCon…

如何捕获 EF 生成的 SQL 脚本?

咨询区 nos&#xff1a;请问我如何查看 entity framewrok 生成的 SQL 脚本&#xff0c;我用的是 MySQL Provider 。回答区 Nick Berardi&#xff1a;你可以像下面这样做&#xff1a;IQueryable query from x in appEntitieswhere x.id 32select x;var sql ((System.Data.Obj…

函数体中的全局变量与局部变量

首先看一道笔试题&#xff1a; 1 var a 100; 2 function testResult(){ 3 var b 2 * a; 4 var a 200; 5 var c a / 2; 6 alert(b); 7 alert(c); 8 } 9 testResult(); 输出结果为&#xff1a;NaN和100&#xff1b; 因为当全局变…

笔试题 遗忘点记录 面向对象特点 + 产生死锁条件+ windows内存管理方法

&#xff09;单一职责原则。就一个类而言&#xff0c;应该仅有一个引起它变化的原因。 //感觉这个是 低耦合 高内聚 &#xff08;2&#xff09;开放封闭原则。软件实体对外扩展开放&#xff0c;对修改封闭。 //这个基础。。 &am…

为什么每个理发店门口都有彩色的柱子?你不知道吧

全世界只有3.14 % 的人关注了爆炸吧知识为什么街上的理发店门口都有一根旋转着的彩色灯柱&#xff1f;好学的小编忍不住去寻找真相...理发店门口彩色的柱子这根彩柱与医疗有关彩柱通常是3种颜色&#xff0c;白红蓝。一般认为&#xff1a;白色绷带&#xff0c;红色绷带上的血(动…

前台jsp页面向后台传汉字出现乱码问题解决办法

如下&#xff1a; jsp页面代码&#xff1a; var groupsName"全体技能组"; window.location.href encodeURI("<%path%>/CustomersServletmethodservice_95518_telephone&provinceCode"provinceCode"&cityCode"cityCode"…

是否显示展开_Creo7.0教程之绝对精度对钣金件展开的作用详解

在讲Creo7.0绝对精度对钣金展开的帮助之前&#xff0c;我们有必要先来说明一下Creo的精度定义。刚使用Creo7.0版本的新建模型&#xff0c;很多网友就问&#xff0c;怎么模板文件中有两个同样单位的选择&#xff0c;“abs”和“rel”有什么区别&#xff1f;新建文件选项其实这就…

UrlRewrite(Url重写技术)

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置------转载 ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置 核心提示&#xff1a;大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧&#xff0c;那么大家有怀疑过他真的是一个…

“快准顺”而不是“信达雅”

在今年夏天策马翻译举办的翻译讲座上&#xff0c;我和詹成教授交流过一个问题&#xff1a;詹教授讲的很多知识点和经验并不符合“信达雅”&#xff1f;詹教授的回答是&#xff1a;“信达雅”并非翻译界的标准&#xff0c;他自己在日常翻译工作中的标准是“快准顺”。詹教授的回…

知乎点赞超过10万的科学脱单法!这绝对是我见过最硬核的撩妹套路......

全世界只有3.14 % 的人关注了爆炸吧知识科学脱单硬核撩妹前两天&#xff0c;超模君在知乎上看到一个热门的问答&#xff1a;开学后如何快速找到对象&#xff1f;这个话题&#xff0c;让超模君回想起了当年刚进入大学的那会儿&#xff0c;校园中秀恩爱的情侣无处不在&#xff0c…

二叉树的非递归遍历

非递归实现二叉树的前序/后序/中序遍历 中序遍历 // arr[1]// arr[2] arr[3] // arr[4] arr[5] arr[6] // arr[7] arr[8]如上数据, 以栈来代替递归实现,输出为4,2,(遍历右元素7,5,8).那么就要想办法以上面的方法入栈4,2…

InfoQ宣布成立CNUT容器技术俱乐部 欲连接中国容器社区

2015年8月28日&#xff0c;首届CNUTCon全球容器技术大会在北京举行。在大会上&#xff0c;极客邦科技与InfoQ中国创始人兼CEO霍泰稳宣布&#xff0c;InfoQ联合国内一线IT技术公司共同成立CNUT容器技术俱乐部&#xff0c;连接中国容器技术社区&#xff0c;推动容器技术以及开源在…

office 高效办公智慧树_干货高效实用的office办公小技巧之word篇

对于office三剑客ppt、Word、Excel的使用成了日常&#xff0c;作为办公党&#xff0c;今天就拿出自己在平时工作之中发现、学到的小技巧来做个总结&#xff0c;分享给大家。相信很多大神对于这些小技巧都已经精通&#xff0c;所以lz会先列出目录&#xff0c;大家可以自行依据目…

POJ 1904 【强连通分量】.cpp

题意&#xff1a; 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明了哪个王子将迎娶哪个邻国的公主.. 但是调皮的国王不太满意~~ 他还想知道…

电梯里为什么放镜子?90%的人都不知道

全世界只有3.14 % 的人关注了爆炸吧知识随着高层建筑不断的拔地而起我们每天可能会上下十几层的高楼人们当然不想去爬楼梯所以电梯已成为生活中必不可少的一部分▼我们几乎每天都会坐电梯上班时、回家时、逛街时当我们每走进电梯时第一动作都会干什么呢大概都会先看自己的妆容再…

WPF中的命令(Command)

这节来讲一下WPF中的命令(Command)的使用。【认识Command】我们之前说过&#xff0c;WPF本身就为我们提供了一个基础的MVVM框架&#xff0c;本节要讲的命令就是其中一环&#xff0c;通过在ViewModel中声明命令&#xff0c;从View中使用Binding绑定命令&#xff0c;就能实现从Vi…

PHP中 对象自动调用的方法:__set()、__get()、__tostring()

总结&#xff1a; &#xff08;1&#xff09;__get($property_name)&#xff1a;获取私有属性$name值时&#xff0c;此对象会自动调用该方法&#xff0c;将属性name值传给参数$property_name&#xff0c;通过这个方法的内部 执行&#xff0c;返回我们传入 的私有属性的值。 &am…