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

【题意】

在这里输入题意

【题解】

![](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. 编写python代码获取4k高清壁纸

    Huskiesir最近在研究python爬虫大约俩周了吧,由于比较懒,也没把具体研究的过程与经验写下来,实在是一大憾事.这次直接上干货,代码送给大家: import re import request ...

  2. HTML 编码规范

    语法 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格或 tab 字符 在属性上,使用双引号 "",不要使用单引号 '' 属性名 / 属性值全小写,用中划线 - 做分隔符 ...

  3. vue中的生命周期

    vue中的生命周期 1,vue生命周期简介: 1.beforeCreate 在实例初始化之后,数据观测和event/watcher时间配置之前被调用.   2.created 实例已经创建完成之后被调 ...

  4. 如何在 Linux 上安装 Nginx (源码安装)

    如何在 Linux( CentOS ) 上安装 Nginx 1.下载 nginx 链接 : https://pan.baidu.com/s/1sll0Hrf 密码 : xnem 2.安装 gcc ( ...

  5. ACM-ICPC Dhaka Regional 2012 题解

    B: Uva: 12582 - Wedding of Sultan 给定一个字符串(仅由大写字母构成)一个字母表示一个地点,经过这个点或离开这个点都输出这个地点的字母) 问: 每一个地点经过的次数(维 ...

  6. Loopback測试软件AX1用户手冊 V3.1

    点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...

  7. java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题

    import java.math.BigInteger; import java.util.*; import java.io.*; public class Main { public static ...

  8. 如何让Java写的程序,脱离Eclipse在别人的电脑上运行?

    Java程序运行,离不开JRE. 将JRE文件夹拷贝出来, 将编写程序的bin文件夹拷贝出来, 再编写一个bat文件. start jre\bin\javaw.exe -cp .\bin\ -Djav ...

  9. ORACLE RAC如何增加节点

    ORACLE RAC系统是一个可以横向进行扩展的系统,当一个RAC系统计算能力不满足客户的需求时候,增加节点能够快速增加整个系统的计算能力,使得客户系统计算能力得到一定的提升,以满足客户不断增长的计算 ...

  10. 使用Swing组件编写一个支持中文文本编辑程序ChineseTextEdit.java

      import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class C ...