考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有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. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...

  2. MSSQL还原数据库,更改用户登陆权限

    有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...

  3. SudokuSolver 1.0:用C++实现的数独解题程序 【一】

    SudokuSolver 1.0 用法与实现效果 SudokuSolver 是一个提供命令交互的命令行程序,提供的命令清单有: H:\Read\num\Release>sudoku.exe Or ...

  4. MyBatis的框架设计

    1.MyBatis的框架设计 2.整体设计 2.1 总体流程 (1)加载配置并初始化       触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信 ...

  5. 【UE4 设计模式】组件模式 Components Pattern

    概述 描述 在单一实体跨越了多个领域时,为了保持领域之间相互解耦,可以将每部分代码放入各自的组件类中,将实体简化为组件的容器. 套路 参考 UE4中的 Componet 组件使用方式 使用场景 有一个 ...

  6. 微信小程序的支付流程

    一.前言 微信小程序为电商类小程序,提供了非常完善.优秀.安全的支付功能 在小程序内可调用微信的API完成支付功能,方便.快捷 场景如下图所示: 用户通过分享或扫描二维码进入商户小程序,用户选择购买, ...

  7. Scrum Meeting 0505

    零.说明 日期:2021-5-5 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成邮箱注册页面功 ...

  8. [no_code]团队贡献分分配规则

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 团队贡献分分配规则 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作 ...

  9. zip和flatMap没有生效

    在Reactor 中flatMap和zip等没有生效 1.一个简单的示例代码如下: 2.示例运行结果 3.得到结论 最近在项目中使用了 Project Reactor ,但发现代码在写着写着有些地方没 ...

  10. 用python检查矩阵的计算

    鉴于最近复习线性代数计算量较大,且1800答案常常忽略一些逆阵.行列式的计算答案,故用Python写出矩阵的简单计算程序,便于检查出错的步骤. 1.行列式 可自行更改阶数 from numpy imp ...