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

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
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 int S(int x,int y){
6 return a[x][y]-a[x-k][y]-a[x][y-k]+a[x-k][y-k];
7 }
8 int main(){
9 scanf("%d%d%d",&n,&m,&k);
10 for(int i=1;i<=n;i++)
11 for(int j=1;j<=m;j++){
12 scanf("%d",&x);
13 a[i][j]=a[i][j-1]+a[i-1][j]-a[i-1][j-1]+x;
14 }
15 for(int i=k;i<=n;i++)
16 for(int j=k;j<=m;j++)
17 ll[i][j]=max(max(ll[i][j-1],ll[i-1][j]),S(i,j));
18 for(int i=k;i<=n;i++)
19 for(int j=m-k+1;j;j--)
20 lr[i][j]=max(max(lr[i][j+1],lr[i-1][j]),S(i,j+k-1));
21 for(int i=n-k+1;i;i--)
22 for(int j=k;j<=m;j++)
23 rl[i][j]=max(max(rl[i][j-1],rl[i+1][j]),S(i+k-1,j));
24 for(int i=n-k+1;i;i--)
25 for(int j=m-k+1;j;j--)
26 rr[i][j]=max(max(rr[i][j+1],rr[i+1][j]),S(i+k-1,j+k-1));
27 for(int i=k;i<=n-k;i++)
28 for(int j=k;j<=m-k;j++){
29 ans=max(ans,ll[n][j]+lr[i][j+1]+rr[i+1][j+1]);
30 ans=max(ans,ll[i][j]+lr[i][j+1]+rr[i+1][1]);
31 ans=max(ans,ll[i][m]+rl[i+1][j]+rr[i+1][j+1]);
32 ans=max(ans,ll[i][j]+rl[i+1][j]+rr[1][j+1]);
33 }
34 for(int i=k;i<=n;i++)
35 for(int j=k;j<=m;j++)f[i]=max(f[i],S(i,j));
36 x=0;
37 for(int i=k;i<=n;i++){
38 x=max(x,f[i]);
39 int y=0;
40 for(int j=i+k;j<=n-k;j++){
41 y=max(y,f[j]);
42 ans=max(ans,x+y+rr[j+1][1]);
43 }
44 }
45 x=0;
46 memset(f,0,sizeof(f));
47 for(int i=k;i<=n;i++)
48 for(int j=k;j<=m;j++)f[j]=max(f[j],S(i,j));
49 for(int i=k;i<=m;i++){
50 x=max(x,f[i]);
51 int y=0;
52 for(int j=i+k;j<=m-k;j++){
53 y=max(y,f[j]);
54 ans=max(ans,x+y+rr[1][j+1]);
55 }
56 }
57 printf("%d",ans);
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. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分 ...

  2. Visual Studio Docker调试端口设置

    一.前言 在Visual Studio 调试程序时,Docker中的容器端口和主机端口映射随机生成,导致每次调试都需要修改前端API接口的地址 二.解决方案 1.修改Docker调试启动参数,找到启动 ...

  3. 每日总结:charcter方法(2021.10.5)

    \t 在文中该处插入一个tab键 \b在文中该处插入一个后退键 \n 换行 \r  在文中该处回车 \f 在文中该处插入换页符 方法: isLetter()是否是一个字母 isDigit()是否是一个 ...

  4. 2021-06-27 & 2021-06-28 集训题解

    西克 题目传送门 Description Solution 跟 2021年省选A卷D2T1 一模一样,懒得讲了 不过这个题似乎有点卡空间,所以卡不过去 Code #include <bits/s ...

  5. LinkedList-常用方法以及双向链表的理解

    链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两 ...

  6. Pytorch 实现简单线性回归

    Pytorch 实现简单线性回归 问题描述: 使用 pytorch 实现一个简单的线性回归. 受教育年薪与收入数据集 单变量线性回归 单变量线性回归算法(比如,$x$ 代表学历,$f(x)$ 代表收入 ...

  7. Python常用加密解密算法

    MD5加密 简介 这是一种使用非常广泛的加密方式,不可逆的,常见16位和32位一般都是md5 实现 import hashlib data = '你好' print(hashlib.md5(data. ...

  8. NX Open,怎样取到面的环LOOP

    在封装的ufun .NET库里面,对UF_MODL_ask_face_loops这个函数并没有封装,导致我们很多不便,那我们在.NET下怎样才能使用这个函数呢??当然是手动处理一下 Public Fu ...

  9. VS Code Just My Code Debugging

    VS Code Just My Code Debugging VS Code for C++ doesn't support Just My Code Refer here: Add support ...

  10. webRTC中语音降噪模块ANS细节详解(二)

    上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...