对于三个正方形的位置一共有六种情况。

预处理出(i,j)左上角,左下角,右上角,右下角区域内最大权值的正方形。

枚举分界线更新答案。

刚开始想了一个错误的DP也是蠢啊。

#include<set>
#include<map>
#include<ctime>
#include<queue>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define inf 100000000000000LL
#define pa pair<int,int>
#define ll long long
#define N 2505
#define fp(a,b,c) for(int a=b;a<=c;a++)
#define fd(a,b,c) for(int a=c;a>=b;a--)
using namespace std;
int n,m,K,ans;
int a[N][N],b[N][N],c[N][N],d[N][N],s[N][N];
int main()
{
scanf("%d%d%d",&n,&m,&K);
fp(i,,n)fp(j,,m)
{
int x;scanf("%d",&x);
s[i][j]=s[i-][j]+s[i][j-]-s[i-][j-]+x;
}
fd(i,K,n)fd(j,K,m)s[i][j]-=s[i-K][j]+s[i][j-K]-s[i-K][j-K]; fp(i,K,n)fp(j,K,m)a[i][j]=max(s[i][j],max(a[i-][j],a[i][j-]));
fp(i,K,n)fd(j,K,m)b[i][j]=max(s[i][j],max(b[i-][j],b[i][j+]));
fd(i,K,n)fp(j,K,m)c[i][j]=max(s[i][j],max(c[i+][j],c[i][j-]));
fd(i,K,n)fd(j,K,m)d[i][j]=max(s[i][j],max(d[i+][j],d[i][j+])); fp(i,K,n-K)fp(j,K,m-K)ans=max(ans,a[i][j]+b[i][j+K]+c[i+K][m]);
fp(i,K,n-K)fp(j,K+K,m)ans=max(ans,b[i][j]+d[i+K][j]+a[n][j-K]);
fp(i,K+K,n)fp(j,K,m-K)ans=max(ans,c[i][j]+d[i][j+K]+a[i-K][m]);
fp(i,K,n-K)fp(j,K,m-K)ans=max(ans,a[i][j]+c[i+K][j]+b[n][j+K]); fp(i,K,n)fp(j,K+K,m-K)ans=max(ans,s[i][j]+a[n][j-K]+b[n][j+K]);
fp(i,K+K,n-K)fp(j,K,m)ans=max(ans,s[i][j]+a[i-K][m]+c[i+K][m]); printf("%d\n",ans);
return ;
}

BZOJ 1177 Oil(特技枚举)的更多相关文章

  1. [BZOJ 1177] Oil

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1177 Solution: 相当于将大矩形分为3块,取每块中最大的正方形 对于此类分成几块 ...

  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

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

  6. [BZOJ]1177: [Apio2009]Oil

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

  7. BZOJ 1050 旅行comf(枚举最小边-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...

  8. BZOJ 3713: [PA2014]Iloczyn( 枚举 )

    斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了... ------------------------------------------------------------- ...

  9. BZOJ 1088 扫雷Mine 枚举初始状态

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088 题目大意: 现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: ...

随机推荐

  1. 20155317 《Java程序设计》0510上课考试博客

    20155317 <Java程序设计>0510上课考试博客 二.Arrays和String单元测试 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常, ...

  2. css首行缩进2个字符

    css设置: p{ text-indent:2em; }

  3. 使用Python进行分布式系统协调 (ZooKeeper/Consul/etcd)

    来源:naughty 链接:my.oschina.net/taogang/blog/410864 笔者之前的博文提到过,随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式 ...

  4. Mac Eclipse快捷键

    Command + O:显示大纲Command + 1:快速修复Command + D:删除当前行Command + Option + ↓:复制当前行到下一行Command + Option + ↑: ...

  5. 求助:springboot调用存储过程并使用了pagehelper分页时报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

    存储过程如下: dao层的sql Controller层调用: html页面 没有使用pagehelper分页之前,可以正常使用 使用了pagehelper之后就报错 ### Error queryi ...

  6. python的种类

    Cpython     Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton   ...

  7. C#随堂

    顺序语句 上到下执行 分支语句 if    else switch() { case 1: Console.WriteLine(1); break; case 2: Console.WriteLine ...

  8. php+MySQL的对用户表分表,使用户均匀分布

    假如说我们目前已有一亿个注册用户,要把这些用户平均分配到100张表中,并且后续注册的用户也要均匀分配到这100张表 首先当用户注册时,如用户名为“username”,用php的crc32()函数处理用 ...

  9. 使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间

    使用Photon引擎进行unity网络游戏开发(三)--网络游戏大厅及房间 Photon PUN Unity 网络游戏开发 连接到Photon ConnectUsingSettings 设置你的客户端 ...

  10. Numpy入门笔记第二天

    # 数组的组合 import numpy as np arr1 = np.arange(5) arr2 = np.arange(3) print arr1 print arr2 [0 1 2 3 4] ...