【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

![](https://images2018.cnblogs.com/blog/1251265/201804/1251265-20180409072317868-908898248.png)
如上图。
显然如果三个正方形。只可能是上面的情况。
则可以处理一下左上角、右上角、左下角、右下角的前缀最大正方形(dp),以及以某一列为底部,某一行为底部的最大正方形和。
然后枚举一下两条分界线就能做出来啦。
细节题。

【代码】

#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std; const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 1500; int n,m,k;
int x[N+10][N+10],a[N+10][N+10],b[N+10][N+10],c[N+10][N+10],d[N+10][N+10],maxh[N+10],maxl[N+10],A[N+10][N+10]; int calc(int x,int y){
return A[x][y]-A[x-k][y]-A[x][y-k]+A[x-k][y-k];
} int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
scanf("%d%d%d",&n,&m,&k);
rep1(i,1,n)
rep1(j,1,m)
scanf("%d",&x[i][j]); rep1(i,1,n)
rep1(j,1,m)
a[i][j]=x[i][j] + a[i-1][j]+a[i][j-1]-a[i-1][j-1]; rep1(i,1,n)
rep1(j,1,m)
A[i][j] = a[i][j];
memset(a,0,sizeof a); rep1(i,k,n)
rep1(j,k,m)
maxh[i] = max(maxh[i],calc(i,j)); rep1(j,k,m)
rep1(i,k,n)
maxl[j] = max(maxl[j],calc(i,j)); rep1(i,k,n)
rep1(j,k,m){
a[i][j] = max(max(a[i-1][j],a[i][j-1]),calc(i,j));
} rep1(i,k,n)
rep2(j,m-k+1,1)
b[i][j] = max(max(b[i-1][j],b[i][j+1]),calc(i,j+k-1)); rep2(i,n-k+1,1)
rep1(j,k,m){
c[i][j] = max(max(c[i+1][j],c[i][j-1]),calc(i+k-1,j));
}
rep2(i,n-k+1,1)
rep2(j,m-k+1,1)
d[i][j] = max(max(d[i+1][j],d[i][j+1]),calc(i+k-1,j+k-1)); int ans = 0;
rep1(i,k,n)
rep1(j,i+k,n){
if (j+k>n) continue;
ans = max(ans,a[i][m]+maxh[j]+c[j+1][m]);
} rep1(i,k,m)
rep1(j,i+k,m){
if (j+k>m) continue;
ans = max(ans,a[n][i]+maxl[j]+d[1][j+1]);
} rep1(i,k,n-k+1)
rep1(j,k,m-k+1){
ans = max(ans,a[i][j]+b[i][j+1]+c[i+1][m]);
ans = max(ans,a[i][m]+c[i+1][j]+d[i+1][j+1]);
ans = max(ans,a[i][j]+b[n][j+1]+c[i+1][j]);
ans = max(ans,a[n][j]+b[i][j+1]+d[i+1][j+1]);
} printf("%d\n",ans);
return 0;
}

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

  1. 【BZOJ 1177】【APIO 2009】Oil

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

  2. 【BZOJ 1179】[Apio2009]Atm

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] tarjan强连通缩点一下. 然后把缩点之后,每个点的钱的数累加起来. 然后从S出发 开始一边做bfs一遍做dp. 最后输出有酒吧的 ...

  3. 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)

    1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...

  4. Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路

    首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...

  5. 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护

    线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...

  6. LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego

    [bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...

  7. 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)

    dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...

  8. 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3940  Solved: 1736 Description ...

  9. 【BZOJ 2132】圈地计划 && 【7.22Test】计划

    两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...

随机推荐

  1. db2 -- 存储过程01

    接下来项目在技能可能偏向数据库方面,补习下. 学习写第一个db2在存储过程,记录下. ---- stored procedures code CREATE OR REPLACE PROCEDURE & ...

  2. lucene构建restful风格的简单搜索引擎服务

    来自于本人博客: lucene构建restful风格的简单搜索引擎服务 本人的博客如今也要改成使用lucene进行全文检索的功能,因此在这里把代码贴出来与大家分享 一,文件夹结构: 二,配置文件: 总 ...

  3. MongoDB创建\更新\删除文档操作

     一.插入\创建文档 --当插入一个不存在的文档时,会自己主动创建一个文档 [root@racdb ~]# mongo MongoDB shell version: 2.4.14 connecti ...

  4. Struts(19)Struts集成

    Struts2 MVC架构 模型视图控制器(Model View Controller)或MVC,MVC是俗称.是一种软件设计模式,用于开发Web应用程序.模型 - 视图 - 控制器模式是由下面三个部 ...

  5. 更换oracle 集群网卡(Changing a Network Interface)

     更换oracle 集群网卡(Changing a Network Interface) 假设换网卡前后 网卡名.ip,网关,子网掩码都不变的话,集群层面不许要做额外的操作. 一下操作为更换网卡后 ...

  6. C++编写绚丽的界面

    近期项目特别的操蛋,要用C++写出各种变态界面,今晚上赶工总算有了一点小的收货. 因为没有时间去写博文 ,等项目期完了  准备 写一系列 怎样在C++/win32/mfc开发高质量  可扩展界面组建 ...

  7. RT-Thread开篇

    一直以来对操作系统都有一种既仰慕又畏惧的情感.一方面被操作系统的强大深深吸引.还有一方面又被操作系统的复杂性感到畏惧. 记得在学校的时候也学过一些操作系统的理论知识,但也只限于理论,更似人云亦云. 本 ...

  8. updatefile.sh - Linux下代码更新脚本

    以下写的是一个关于文件上传的代码shell脚本 该篇文章主要有下面几个方面的考虑: 1.文章主要用于在Linux下代码包批量上传: 2.将被覆盖的代码备份做备份,用于兴许做问题查看或者代码的回退(回退 ...

  9. gson的安装和使用

    gson的安装和使用 1.安装 2.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  10. (二)Ribbon(负载均衡的客户端)+Rest

    前面讲了服务的注册与发现,微服务项目会把项目的各个业务需求划分成几个模块来单独提供服务,各服务间的调用都是采用Http Restful来实现,但是在SpringClound中服务间的调用有两种方式:一 ...