Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1177

Solution:

相当于将大矩形分为3块,取每块中最大的正方形

对于此类分成几块的题目,要想到枚举分割线

一共只有这6种情况:

我们只要先预处理左上左下右上右下四个方向最大答案的前缀和,

再对于每种情况枚举分割线即可

对于最左边的两种情况,只要将中间一列的宽度保证为k即可

Code:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=+; int n,m,k,t,res=,s[MAXN][MAXN],a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN],d[MAXN][MAXN]; int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&t),s[i][j]=s[i-][j]+s[i][j-]-s[i-][j-]+t;
for(int i=n;i>=k;i--) for(int j=m;j>=k;j--) s[i][j]-=s[i-k][j]+s[i][j-k]-s[i-k][j-k]; for(int i=k;i<=n;i++) for(int j=k;j<=m;j++) a[i][j]=max(s[i][j],max(a[i-][j],a[i][j-]));
for(int i=k;i<=n;i++) for(int j=m-k+;j>=;j--) b[i][j]=max(s[i][j+k-],max(b[i-][j],b[i][j+]));
for(int i=n-k+;i>=;i--) for(int j=k;j<=m;j++) c[i][j]=max(s[i+k-][j],max(c[i+][j],c[i][j-]));
for(int i=n-k+;i>=;i--) for(int j=m-k+;j>=;j--) d[i][j]=max(s[i+k-][j+k-],max(d[i+][j],d[i][j+])); for(int i=k;i<=n;i++) for(int j=k;j<=m;j++) res=max(res,a[i][j]+b[i][j+]+c[i+][m]);
for(int i=n-k+;i>=;i--) for(int j=k;j<=m;j++) res=max(res,c[i][j]+d[i][j+]+a[i-][m]);
for(int i=k;i<=n;i++) for(int j=k;j<=m;j++) res=max(res,a[i][j]+c[i+][j]+d[][j+]);
for(int i=k;i<=n;i++) for(int j=m-k+;j>=;j--) res=max(res,b[i][j]+d[i+][j]+c[][j-]); for(int i=*k;i<=n;i++) for(int j=k;j<=m;j++) res=max(res,s[i][j]+a[i-k][m]+c[i+][m]);
for(int j=*k;j<=m;j++) for(int i=k;i<=n;i++) res=max(res,s[i][j]+a[n][j-k]+b[n][j+]); printf("%d",res);
return ;
}

Review:

由求三块权值和最大的不交叉的正方形  ------->  将矩形分为3块  -------->  枚举分割线

碰到求不相交的最值问题时,想到切割+枚举切割线的方法

[BZOJ 1177] Oil的更多相关文章

  1. BZOJ 1177 Oil(特技枚举)

    对于三个正方形的位置一共有六种情况. 预处理出(i,j)左上角,左下角,右上角,右下角区域内最大权值的正方形. 枚举分界线更新答案. 刚开始想了一个错误的DP也是蠢啊. #include<set ...

  2. 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil

    1177: [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1477  Solved: 589[Submit] Descri ...

  3. 【BZOJ 1177】【APIO 2009】Oil

    http://www.lydsy.com/JudgeOnline/problem.php?id=1177 前缀和优化,时间复杂度$O(nm)$ 因为数据不全,快速读入会导致RE,切记! #includ ...

  4. BZOJ 1177 [Apio2009]Oil(递推)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...

  5. [BZOJ]1177: [Apio2009]Oil

    题目大意:给出一个n*m的矩阵,选出3个不相交的k*k子矩阵,使得子矩阵中元素和最大.(k<=n,m<=1500) 思路:选出的子矩阵有3种情况:横着排三个.竖着排三个.三角状分布(其中有 ...

  6. 【BZOJ 1177】 [Apio2009]Oil

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如上图. 显然如果三个正方形.只可能是上面的情况. 则可以处理一下左上角.右上角.左下角.右下角的前缀最大正方形(dp),以及以某一 ...

  7. 【BZOJ】【1177】【APIO2009】Oil

    DP 找出三个正方形,可以转化为将整个油田切成三个矩形块,每块中各找一个正方形区域,切的形式只有6种,分类更新ans即可 题解:http://trinklee.blog.163.com/blog/st ...

  8. Week Two

    2018.12.3: 1.[BZOJ 4819] 2.[BZOJ 4827] 3.[P1919] 4.[FFT模板] 2018.12.4: 1.[NTT] 2.[MTT(CRT)] 3.[MTT(my ...

  9. BZOJ 4614 【Wf2016】 Oil

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

随机推荐

  1. [学习笔记]Tarjan&&欧拉回路

    本篇并不适合初学者阅读. SCC: 1.Tarjan缩点:x回溯前,dfn[x]==low[x]则缩点. 注意: ①sta,in[]标记. ②缩点之后连边可能有重边. 2.应用: SCC应用范围还是很 ...

  2. 如何解析Json返回的数据

    Json在Web开发的用处非常广泛,作为数据传递的载体,如何解析Json返回的数据是非常常用的.下面介绍下四种解析Json的方式: Part 1 var list1 = [1,3,4]; alert( ...

  3. 几种list集合的区别

    SDK提供了有序集合接口java.util.List的几种实现,其中三种最为人们熟知的是Vector.ArrayList和LinkedList.有关这些List类的性能差别是一个经常被问及的问题.在这 ...

  4. 计算1-1/x+1/x*x

    // algo1-1.cpp 计算1-1/x+1/x*x. #include<stdio.h> #include<sys/timeb.h> void main() { time ...

  5. Android 实现对图片 Exif 的修改(Android 自带的方法)

    很多时候我们都要对我们的图片信息进行一些处理,比如向图片中写入经纬度,拍摄时间,设备信息,作者等等. 这个时候我们就要对我们的图片Exif进行写入信息的操作,当然,我们想知道图片的Exif信息,也可以 ...

  6. 调用webservice接口

    这里是cxf服务器,采用myeclipse6.5,把wsdl放到本地的方式. 新建一个包, 把解析到的类放在这个包下面. 生成的代码结构: 调用: public static String callI ...

  7. swift中的尾随闭包的用法

    尾随闭包就是这个函数的最后一个参数是一个闭包,所以规定这个闭包既可以写在函数的参数括号里面,也可以直接放在最后面来使用,就像重新给这个函数定义了一次一样,有些怪,不过用的时候,可以把闭包写在外面的.这 ...

  8. DotNETCore 学习笔记 依赖注入和多环境

    Dependency Injection ------------------------------------------------------------------------ ASP.NE ...

  9. 微信小程序登录流程图

    一. 官方登录时序图 官方的登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端- 微信服务器端 1. 客户端获得code,并 ...

  10. Google Intern

    申请 事情应该从去年(2013)说起,好基友从百度离职跳到了Google,回学校打印本科成绩单,然后晚上在scuacm群里,结果Dr. zuo问我想去实习么,正好有学长可以内推. 于是乎写了简历,然后 ...