考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:
1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即可
2.2种,两条横线/竖线划分,以横线为例,只需要处理处每一行的答案,然后,然后简单维护一下即可

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 #define N 2005
  4. 4 int n,m,k,x,y,ans,f[N],a[N][N],ll[N][N],lr[N][N],rl[N][N],rr[N][N];
  5. 5 int S(int x,int y){
  6. 6 return a[x][y]-a[x-k][y]-a[x][y-k]+a[x-k][y-k];
  7. 7 }
  8. 8 int main(){
  9. 9 scanf("%d%d%d",&n,&m,&k);
  10. 10 for(int i=1;i<=n;i++)
  11. 11 for(int j=1;j<=m;j++){
  12. 12 scanf("%d",&x);
  13. 13 a[i][j]=a[i][j-1]+a[i-1][j]-a[i-1][j-1]+x;
  14. 14 }
  15. 15 for(int i=k;i<=n;i++)
  16. 16 for(int j=k;j<=m;j++)
  17. 17 ll[i][j]=max(max(ll[i][j-1],ll[i-1][j]),S(i,j));
  18. 18 for(int i=k;i<=n;i++)
  19. 19 for(int j=m-k+1;j;j--)
  20. 20 lr[i][j]=max(max(lr[i][j+1],lr[i-1][j]),S(i,j+k-1));
  21. 21 for(int i=n-k+1;i;i--)
  22. 22 for(int j=k;j<=m;j++)
  23. 23 rl[i][j]=max(max(rl[i][j-1],rl[i+1][j]),S(i+k-1,j));
  24. 24 for(int i=n-k+1;i;i--)
  25. 25 for(int j=m-k+1;j;j--)
  26. 26 rr[i][j]=max(max(rr[i][j+1],rr[i+1][j]),S(i+k-1,j+k-1));
  27. 27 for(int i=k;i<=n-k;i++)
  28. 28 for(int j=k;j<=m-k;j++){
  29. 29 ans=max(ans,ll[n][j]+lr[i][j+1]+rr[i+1][j+1]);
  30. 30 ans=max(ans,ll[i][j]+lr[i][j+1]+rr[i+1][1]);
  31. 31 ans=max(ans,ll[i][m]+rl[i+1][j]+rr[i+1][j+1]);
  32. 32 ans=max(ans,ll[i][j]+rl[i+1][j]+rr[1][j+1]);
  33. 33 }
  34. 34 for(int i=k;i<=n;i++)
  35. 35 for(int j=k;j<=m;j++)f[i]=max(f[i],S(i,j));
  36. 36 x=0;
  37. 37 for(int i=k;i<=n;i++){
  38. 38 x=max(x,f[i]);
  39. 39 int y=0;
  40. 40 for(int j=i+k;j<=n-k;j++){
  41. 41 y=max(y,f[j]);
  42. 42 ans=max(ans,x+y+rr[j+1][1]);
  43. 43 }
  44. 44 }
  45. 45 x=0;
  46. 46 memset(f,0,sizeof(f));
  47. 47 for(int i=k;i<=n;i++)
  48. 48 for(int j=k;j<=m;j++)f[j]=max(f[j],S(i,j));
  49. 49 for(int i=k;i<=m;i++){
  50. 50 x=max(x,f[i]);
  51. 51 int y=0;
  52. 52 for(int j=i+k;j<=m-k;j++){
  53. 53 y=max(y,f[j]);
  54. 54 ans=max(ans,x+y+rr[1][j+1]);
  55. 55 }
  56. 56 }
  57. 57 printf("%d",ans);
  58. 58 }

[bzoj1177]Oil的更多相关文章

  1. [BZOJ1177][Apio2009]Oil

    [BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...

  2. BZOJ1177 [Apio2009]Oil 二维前缀和 二维前缀最值

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1177 题意概括 在一个n*m的矩阵中,每一个位置一个数字. 现在让你选出3个k*k的矩阵,它们互不 ...

  3. bzoj1177 [Apio2009]Oil 二维前缀最大值,和

    [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2300  Solved: 932[Submit][Status][Disc ...

  4. BZOJ1177:[APIO2009]Oil(枚举,前缀和)

    Description 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M×N个小块. Siruseri地质 ...

  5. BZOJ 4614 【Wf2016】 Oil

    题目链接:Oil 感觉同时几线作战有点吃不消啊-- 这道题有一个显然的结论,那就是最优的直线一定过某条线段的端点. 仔细想想很有道理.如果最终的直线没有过线段的端点的话,那么这条直线就一定可以平移,直 ...

  6. Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. Oil Deposits(dfs)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  8. 2016HUAS暑假集训训练题 G - Oil Deposits

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  9. uva 572 oil deposits——yhx

    Oil Deposits  The GeoSurvComp geologic survey company is responsible for detecting underground oil d ...

随机推荐

  1. 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案

    作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...

  2. 创建HTML文档

    目录 创建HTML文档 构筑基本的文档结构 DOCTYPE元素 DOCTYPE元素 代码清单1 使用DOCTYPE元素 html元素 html元素 代码清单2 使用html元素 head元素 head ...

  3. pytest执行时mian函数传参

    在代码中执行pytest可以通过main函数 加参数来指定运行规则时,参数需要放在列表或者元祖中 # pytest.main(["--html=report.html"]) # p ...

  4. leetcode347 —— n中topK && PriorityQueue(Heap) && Map遍历

    题目要求:求前K个最频繁出现的数字. 1.很容易想到,使用HashMap<Integer,Integer>来存储<number,frequency>键值对 1 int n = ...

  5. 【UE4 C++】Print、Delay、ConsoleCommand

    基于UKismetSystemLibrary PrintString /** * Prints a string to the log, and optionally, to the screen * ...

  6. ORB_SLAM3 -- 配置安装

    安装环境 Ubuntu20.04 ORB_SLAM3依赖项安装 opencv3 ORB_SLAM3可用opencv3或opencv4编译,作者这里安装测试了opencv3 Step1: 安装openc ...

  7. USART 硬件流控

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

  8. stm32学习笔记之串口通信

    在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...

  9. 因为一个小小的Integer问题导致阿里一面没过,遗憾!

    面试题:new Integer(112)和Integer.valueOf(112)的区别 面试官考察点猜想 这道题,考察的是对Integer这个对象原理的理解,关于这道题的变体有很多,我们会一一进行分 ...

  10. HTML基础强化

    1.如何理解HTML? HTML类似于一份word"文档" 描述文档的"结构" 有区块和大纲 2.对WEB标准的理解? Web标准是由一系列标准组合而成.一个网 ...