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

预处理出(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. 北京Uber优步司机奖励政策(4月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. angularJS ng-repeat中的directive 动态加载template

    有个需求,想实现一个html组件,传入不同的typeId,渲染出不同的表单元素. <div ng-repeat="field in vm.data"> <magi ...

  3. 创龙OMAPL138的NMI中断

    1. 不可屏蔽中断部分代码,注册中断函数,6748有几个NMI的引脚? void InterruptInit(void) { // 初始化 DSP 中断控制器 IntDSPINTCInit(); // ...

  4. STM32的备份寄存器测试

    1. 研究STM3的备份寄存器,注意,如果要测试这个例程的话,VBAT不能和VDD接一起,必须分开. 2. 理解,备份寄存器可以有VBAT独立供电,也就是外接电池,备份寄存器在VBAT供电情况下,如果 ...

  5. bootstrap的Alerts中 可以放置p标签 设置 align="center" 用来设置文本居中

    效果

  6. 【JUC源码解析】ReentrantReadWriteLock

    简介 ReentrantReadWriteLock, 可重入读写锁,包括公平锁和非公平锁,相比较公平锁而言,非公平锁有更好的吞吐量,但可能会出现队列里的线程无限期地推迟一个或多个读线程或写线程的情况, ...

  7. 五、Django之路由系统

    1.普通路由匹配 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:它就是以这种方式告诉Django,用哪个URL调用 ...

  8. 解析build.gradle文件

    Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言DSL来声明项目设置,摒弃了传统XML(如Ant和Maven)的各种繁琐配置 项目结构如上图: 1.最外层目录下的b ...

  9. JavaScript查找元素的方法

    1.根据id获取元素 document.getElementById("id属性的值"); 2.根据标签名字获取元素 document.getElementsByTagName(& ...

  10. 发送请求工具—Advanced REST Client的安装使用

    1. 0 下载得到Advanced-REST-client_v3.1.9.zip 链接:http://pan.baidu.com/s/1c0vUnJi 密码:z34d 1.1 解压Advanced-R ...