http://www.lydsy.com/JudgeOnline/problem.php?id=1177

前缀和优化,时间复杂度$O(nm)$

因为数据不全,快速读入会导致RE,切记!

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1503;
int in() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 3) + (k << 1) + c - '0';
return k * fh;
} int a[N][N], a1[N][N], a2[N][N], a3[N][N], a4[N][N], s[N][N];
int n, m, k, m1[N][N], m2[N][N], m3[N][N], m4[N][N], h[N], l[N]; void init1() {
int S;
for(int i = k; i <= n; ++i)
for(int j = k; j <= m; ++j) {
S = s[i][j] - s[i - k][j] - s[i][j - k] + s[i - k][j - k];
a1[i - k + 1][j - k + 1] = S;
a2[i - k + 1][j] = S;
a3[i][j - k + 1] = S;
a4[i][j] = S;
}
} void init2() {
for(int i = n - k + 1; i >= 1; --i)
for(int j = m - k + 1; j >= 1; --j)
m1[i][j] = max(a1[i][j], max(m1[i + 1][j], m1[i][j + 1]));
for(int i = n - k + 1; i >= 1; --i)
for(int j = k; j <= m; ++j)
m2[i][j] = max(a2[i][j], max(m2[i + 1][j], m2[i][j - 1]));
for(int i = k; i <= n; ++i)
for(int j = m - k + 1; j >= 1; --j)
m3[i][j] = max(a3[i][j], max(m3[i - 1][j], m3[i][j + 1]));
for(int i = k; i <= n; ++i)
for(int j = k; j <= m; ++j)
m4[i][j] = max(a4[i][j], max(m4[i - 1][j], m4[i][j - 1]));
} int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
scanf("%d", &a[i][j]);
s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - s[i - 1][j - 1];
} init1(); init2(); int ans = 0, f1, f2, f3, f4;
for(int i = k; i <= n - k; ++i)
for(int j = k; j <= m - k; ++j) {
f1 = m4[i][j] + m3[i][j + 1] + m1[i + 1][1];
f2 = m3[i][j + 1] + m1[i + 1][j + 1] + m2[1][j];
f3 = m2[i + 1][j] + m1[i + 1][j + 1] + m3[i][1];
f4 = m4[i][j] + m2[i + 1][j] + m4[1][j + 1];
ans = max(ans, f1);
ans = max(ans, f2);
ans = max(ans, f3);
ans = max(ans, f4);
} for(int i = k + 1; i <= n - (k << 1) + 1; ++i)
for(int j = 1; j <= m - k + 1; ++j)
h[i] = max(h[i], a1[i][j]);
for(int i = k; i <= n - (k << 1); ++i)
ans = max(ans, m3[i][1] + m1[i + k + 1][1] + h[i + 1]);
for(int j = k + 1; j <= m - (k << 1) + 1; ++j)
for(int i = 1; i <= n - k + 1; ++i)
l[j] = max(l[j], a1[i][j]);
for(int j = k; j <= m - (k << 1); ++j)
ans = max(ans, m2[1][j] + m1[1][j + k + 1] + l[j + 1]); printf("%d\n", ans);
return 0;
}

APIO的题目~

【BZOJ 1177】【APIO 2009】Oil的更多相关文章

  1. 【BZOJ 1178】【APIO 2009】CONVENTION会议中心

    http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...

  2. 【BZOJ 1177】 [Apio2009]Oil

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

  3. 【BZOJ】【1177】【APIO2009】Oil

    DP 找出三个正方形,可以转化为将整个油田切成三个矩形块,每块中各找一个正方形区域,切的形式只有6种,分类更新ans即可 题解:http://trinklee.blog.163.com/blog/st ...

  4. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  5. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  6. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  7. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  8. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  9. 【转载】之 破解 (【原创】Xenocode Postbuild 2009 加壳破解 (不断更新中...))

    声明 本文转载,感谢原作者dotNetSafe分享 [原创]Xenocode Postbuild 2009 加壳破解 (不断更新中...) http://bbs.pediy.com/showthrea ...

随机推荐

  1. WinCE项目应用之RM905a+医用放射性核素活度计

    RM905a+医用放射性核素活度计大概是我做的第一个WinCE项目,RM905a的升级版.RM905a是曾经的老大LZF 2000年左右的作品,基于51单片机开发,数码管显示,稳定可靠,好似目前还在生 ...

  2. UESTC-第五届ACM趣味程序设计竞赛第四场(正式赛)--不完全解题报告

    比赛链接: http://acm.uestc.edu.cn/contest.php?cid=230 A.Police And The Thief ---UESTC 1913 简单博弈,先假设在警察先走 ...

  3. NOIP2010乌龟棋[DP 多维状态]

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

  4. 分层开发之MySchool

    No.1实现登陆功能,验证用户名和密码.从数据库里进行匹配,看是否有符合要求的数据. 在DAL层编写代码,返回值为布尔类型.方法参数为(student实体类对象),使用参数化SqlParameter类 ...

  5. 常用Meta整理

    标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他web 服务. ——W3School 必要属性 ...

  6. 关于js预编译以及js文件执行顺序的几个问题。

    关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a           <script type="text/javascript" ...

  7. EF的入门使用 (电影管理)

    控制器代码: public class HomeController : Controller { private NewDBContext ndc = new NewDBContext(); pub ...

  8. offsetParent详解

    offsetParent与parentNode一样,都是获取父节点,但是offsetParent却有很大的不同之处: offsetParent找有定位的父节点,没有定位默认是body,ie7以下定位在 ...

  9. offline .net3.5

    1.加载虚拟光驱 2.dism.exe /online /enable-feature /featurename:netfx3 /Source:D:\sources\sxs

  10. ASP.NET 单点登陆

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...