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

【题意】

在这里输入题意

【题解】

![](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. 51nod 1576 Tree and permutation(树的重心+dfn序)

    乍一看我不会. 先不考虑加点. 先考虑没有那个除\(2\). 考虑每一条边的贡献,假设某一条边把这棵树分成大小为x,y的两个部分. 那么这条边最多可以被使用\(min(x,y)*2\)次(因为有进有出 ...

  2. 我的Linux系统开始学习的过程

    Linux系统,不知大家是否了解.接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是.上大学前的我的确对Linux一无所知,那时候接触面窄,都没有听说过此名字,上了大学后,身边的人有学习 ...

  3. myeclipse的git插件安装

    首先需要一个myeclies的Git插件EGit 点击下载5.0.1 官方网站

  4. vue定义对象变量并合并成新的对象

    背景: 一般情况下,向后台发送数据请求会存在公共的变量,为了避免每一个相同部分的变量都重新定义,则想出以下解决方案: 例如一下:function,version,Authorization是公共请求部 ...

  5. python_字符串常用操作

    name = "monicao"name.capitalize() #首字母大写print(name.capitalize()) print(name.count("o& ...

  6. Git:与GitHub搭配及SSH登录

    远程库(GitHub)上的地址 搭建本地库 准备一个文件 将地址用别名存在git上 推送到远程库 克隆 克隆的效果 1)完整的把远程库下载到本地 2)别名也完整保留 3)同时也初始化了本地库 邀请团队 ...

  7. 数字签名技术与https

    1,非对称加密技术 非对称加密算法需要两个密钥,公开密钥(publickey)和私有密钥(privatekey):公钥和私钥是成对出现的. 非对称加密例子:B想把一段信息传给A,步骤:1)A把公钥传给 ...

  8. Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password

    在配置JMX远程访问的时候,设置jmxremote.password文件权限,修改该文件时添加写权限,chmod +w jmxremote.password ,放开角色信息那俩行的注释,保存,再使用c ...

  9. 文件类似性推断 -- SimHash

    近期调研了一下simhash算法,它主要用在谷歌网页去重中.网上有非常多原理性的介绍. 既然能够用来推断文件的相似性,就想知道效果怎么样.simhash的准确度是否依赖于分词算法?是否和simhash ...

  10. 深入分析Java中的I/O类的特征及适用场合

    Java中有40多个与输入输出有关的类.假设不理清它们之间的关系.就不能灵活地运用它们. 假设从流的流向来分,可分为输入流和输出流,而输入流和输出流又都可分为字节流和字符流.因而可将Java中的I/O ...