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. Maven学习(七)仓库

    * Maven仓库 在项目开发中,  项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件, Maven仓库就是放置JAR文件(WAR,ZIP,P ...

  2. LinkedList链式集合

    LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下1. public LinkedList():  ——生成空的链表2. publ ...

  3. php一句话后门过狗姿势万千之传输层加工(1)

    写在前面:过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面.但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人都会 ...

  4. angular留言板

    今天使用angularJs写了一个留言板,简单的享受了下angular处理数据的双向绑定的方便:注释已经都写到行间了 <!DOCTYPE html> <html lang=" ...

  5. javascript中在链表中向前(向后)移动n个节点

     1.概念 在链表上移动n个节点,我第一眼看到这个需求的时候首先想到的是当前节点.使用这个当前节点作为参考来移动,没有这个当前节点的话是没有办法在链表上前进和后退的.初始化定义链表的时候定义一个当前节 ...

  6. XAMPP部署

    1,直接从官网上下载,然后安装即可 2,出现的问题: a,启动Apache服务器的时候,出现打开端口失败,原因80号端口已被占用,解决方案,更改config文件,将端口设置为8090 b,给phpmy ...

  7. DEDECMS之二 如何修改模板页

    使用织梦系统最经常是为了仿站,那么模板应该怎么改? 这里主要谈谈关于比较常用的几个模板页 网站主页.列表页.内容页.栏目的调用 1.主页模板 常用组合方法:index.htm + head.htm + ...

  8. 让Bootstrap轮播插件carousel支持左右滑动手势的三种方法

    因为最近开发的项目涉及到移动设备上的 HTML5 开发,其中需要实现轮播效果.然后最快捷的方式,你知道的(Bootstrap),然后原生的 Bootstrap 的 carousel.js 插件并没有支 ...

  9. 【转】如何利用logrotate工具自动切分滚动中的日志文件

    FROM : http://www.2cto.com/os/201503/381812.html 在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或da ...

  10. .clear 万能清除浮动

    html body div.clear, html body span.clear { background: none; border: 0; clear: both; display: block ...